Bitrix24クラウドのビジネスプロセスのカスタムアクティビティを作成する方法

1C-Bitrix 2016 Winter Partner Conferenceで、Oleg StrokatyとAlexei Kirsanovは、クラウドBitrix24の下でビジネスプロセスのカスタムアクティビティを開発するマスタークラスを紹介しました。 このトピックに関する情報は、コース「Bitrix Framework Developer」にもあります(リンク-投稿の最後)。



これらの資料を研究し、プロジェクトでテストした後、Bitrix24クラウドのアクティビティの開発に関する簡単で詳細な説明リーフレットをコンパイルしました。それらを研究している開発者はすでに特定の知識ベースを持っています。 このメモをこの投稿で共有したいと思います。



クラウドBitrix24のカスタムアクティビティは、いわゆる「セカンドタイプ」のアプリケーションとして実装されます。 つまり、アクティビティハンドラーとそのインストーラーを含むphpファイルは外部Webサーバー上のどこかに配置する必要があり、Bitrix24は特定のアドレスでアクセスします。たとえば、



https://your_domain/b24/activity_name/index.php



このアドレスを使用して、アプリケーションをポータルに追加し、アプリケーションをBitrix24マーケットプレイスに公開します。



1どこから始めるか



1.1 SSL証明書



このアプリケーションが正しく機能するためには、ドメインにSSL証明書(最小ドメイン検証(DV)証明書)が必要です。 SSL証明書なしでアプリケーションを開発およびテストできますが、アプリケーションの実際の作業にはそれが必要になるため、事前に注意する必要があります。



1.2アプリケーション構造



アプリケーションファイル自体では、まず、スケルトン(アプリケーションページの構造)を形成する必要があります。



<?php $protocol=$_SERVER['SERVER_PORT']=='443'?'https':'http'; $host=explode(':',$_SERVER['HTTP_HOST']); $host=$host[0]; define('BP_APP_HANDLER',$protocol.'://'.$host.$_SERVER['REQUEST_URI']); header('Content-Type: text/html; charset=UTF-8'); ?> <br/><br/> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script src=«//api.bitrix24.com/api/v1/"></script> </body> </html>
      
      







このスケルトンは、以下で説明するようにテストポータルですぐに接続し、ビルドとデバッグを開始できます。 サーバー上のアプリケーションコードで何かを変更する場合-Bitrix24側でアプリケーションを再接続する必要はありません-アプリケーションページをリロードするだけです。



2受け取るデータとその確認方法



カスタムアクティビティがビジネスプロセスの一部として呼び出されると、$ _REQUEST配列で何かがアプリケーションに届きます。

ビジネスプロセスの実行中に設定されたアクティビティパラメータの値は、$ _REQUEST ['properties']で利用できます。

$ _REQUEST ['auth']配列には、Bitrix24 REST APIにリクエストを送信するときに使用する必要がある承認データがあります。



当然、$ _REQUEST配列の内容を、受信するデータ形式で受信したデータに準拠しているかどうかを確認する必要があります。 単純な関数を使用して、ある種の最小限のデータ検証を整理できます。



 <?php function clean($value = "") { $value = trim($value); $value = stripslashes($value); $value = strip_tags($value); $value = htmlspecialchars($value); return $value; } ?> <br/><br/> <?php function check_length($value = "", $min, $max) { $result = (mb_strlen($value) < $min || mb_strlen($value) > $max); return !$result; } ?>
      
      







正規表現を使用してより複雑なチェックを使用できます(また、使用する必要があります)が、この投稿ではそれらについて説明しません。



3 PHPでREST-API Bitrix24を使用する



次に、curlを介してBitrix24にリクエストを送信するphp関数が必要です。



 <? function callB24Method(array $auth, $method, $params){ $c=curl_init('https://'.$auth['domain'].'/rest/'.$method.'.json'); $params["auth"]=$auth["access_token"]; curl_setopt($c,CURLOPT_RETURNTRANSFER,true); curl_setopt($c,CURLOPT_POST,true); curl_setopt($c,CURLOPT_POSTFIELDS,http_build_query($params)); AddMessage2Log($c, "demo_user_info"); $response=curl_exec($c); AddMessage2Log($response, "demo_user_info"); $response=json_decode($response,true); return $response['result']; } ?>
      
      







php-codeからBitrix24 rest-apiを呼び出す必要がある場合、この関数をさらに使用できます。



 <?php $user_info=callB24Method($auth,'user.get',array( 'ID'=>$ID ) ); //   user.get - rest-      //  $auth    - : //'auth' => // array ( // 'access_token' => 'numdjpxul1o8o5atfj5td4z73o8hhlds', // 'expires_in' => '3600', // 'scope' => 'user,bizproc', // 'user_id' => '1', // 'status' => 'L', // 'member_id' => '59f6a44727c5c05ae6f53b9dbea88c4f', // 'domain' => '__.bitrix24.ru', // ), ?>
      
      







4アプリケーションのデバッグ方法



質問がすぐに発生します:アプリケーションをデバッグする方法 サーバー上でも実行されます。つまり、すべてのファイルを何らかの種類のファイルに安全にログインできます。 たとえば、PHP関数fopen、fwrite、fcloseを使用できます。 サーバーにもBitrixがあるので、BitrixフレームワークのAddMessage2Log関数を使用します(ヘッダーを接続した後)。



 <?php define("LOG_FILENAME", $_SERVER[«DOCUMENT_ROOT»].»/__log_castom1_".date("Ymd").".txt»); AddMessage2Log($user_info, "demo_user_info"); ?>
      
      







5 JavaScriptでBitrix24 REST APIを使用する



rest-api bitrix24およびjavascriptを介して呼び出すことができます。 次のように:



 BX24.callMethod( 'bizproc.activity.add', //REST-api      params, function(result) { if (result.error()) alertify.alert('Error: '+result.error()); else alertify.alert('Installation successfully completed'); } );
      
      







6単純なアクティビティの作成と削除



特に、アクティビティをインストールおよび削除するには2つのJavaスクリプトハンドラーが必要です(この例では、ユーザーIDを要求し、ビジネスプロセスにデータを返すクラウドBitrix24のアクティビティを作成します:電話、スカイプ、および位置)。



 BX24.init(function() { }); function installActivity1() { var params={ 'CODE':'user_additional_info', //     'HANDLER':'<?=BP_APP_HANDLER?>', 'AUTH_USER_ID':1, 'USE_SUBSCRIPTION':'Y', //Y -  -    , N -     'NAME':'Additional information from users card', 'DESCRIPTION':'Aktiviti gets information from the user cards', 'PROPERTIES':{ //    'User':{ 'Name':'User', 'Type':'user', 'Required':'Y', 'Multiple':'N', }, }, 'RETURN_PROPERTIES':{ //,     - 'PERSONAL_MOBILE':{ 'Name':'Users_PERSONAL_MOBILE', 'Type':'string', 'Required':'N', 'Multiple':'N', }, 'WORK_POSITION':{ 'Name':'Users_WORK_POSITION', 'Type':'string', 'Required':'N', 'Multiple':'N', }, 'UF_SKYPE':{ 'Name':'Users_UF_SKYPE', 'Type':'string', 'Required':'N', 'Multiple':'N', }, } } BX24.callMethod( 'bizproc.activity.add', params, function(result) { if (result.error()) alertify.alert('Error: '+result.error()); else alertify.alert('Installation successfully completed'); } ); } function uninstallActivity1(){ var params={ 'CODE':'user_additional_info' } BX24.callMethod( 'bizproc.activity.delete', params, function (result) { if (result.error()) alertify.alert('Error: '+result.error()); else alertify.alert('Uninstallathion successfully completed'); } ); }
      
      







7 JavaScriptでのリクエストとレスポンスのロギング



Bitrix24 Marketplaceでアプリケーションをホストする予定の場合、Bitrix24からのすべての要求とすべての応答を記録する必要があります-PHPコードから送信したものだけでなく、javascriptから送信したものも



サーバーにBitrixもある場合は、Bitrixフレームワークライブラリのjs関数を使用できます。



 BX.ajax.get('/b24/ajax/js_request_log.php', { params });
      
      







JavaScriptからajaxを取得するスクリプトロガーは、次のようになります。



 <?php require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); define('LOG_FILENAME', $_SERVER['DOCUMENT_ROOT'].'/ajax/js_error.txt'); $request = \Bitrix\Main\Context::getCurrent()->getRequest(); if ($request->get('data')) { AddMessage2Log(print_r($request->get('data'), true)); } ?>
      
      







8答えをビジネスプロセスに返すことを忘れないでください



アクティビティを宣言するときに、パラメータ 'USE_SUBSCRIPTION': 'Y'を設定した場合、アクティブ化について説明した出力パラメータRETURN_PROPERTIESの配列に対応する応答をビジネスプロセスに返す必要があります。 これを行うには、rest-api bizproc.event.sendを使用します



 <?php callB24Method($auth,'bizproc.event.send',array( "EVENT_TOKEN"=>$event_token, "RETURN_VALUES"=>array( 'PERSONAL_MOBILE'=>$user_info[0]['PERSONAL_MOBILE'], 'WORK_POSITION'=>$user_info[0]['WORK_POSITION'], 'UF_SKYPE'=>$user_info[0]['UF_SKYPE'], ), "LOG_MESSAGE"=>'OK' )); ?>
      
      







9ポータルへのアプリケーションの追加



Bitrix24ポータルにアプリケーションを追加するために、Marketplaceで公開する必要はありません-このポータルでのみ使用するために、ポータルにのみ追加できます。 これを行うには、Bitrix24クラウドの左側のメニューで、[アプリケーションの追加]項目を選択し、[個人用]を選択します。







開いたフォームで、アプリケーションの名前、メニュー項目の名前を示し、アプリケーションが必要とするサブシステムにアクセスする権利を示します。 アプリケーションがアクティビティをビジネスプロセスに追加する場合は、[ビジネスプロセス]チェックボックスをオンにします。 サーバーにあるアプリケーションファイルへのリンクを示します。







追加したアプリケーションは、ローカルアプリケーションのリストとアプリケーションメニューに表示されます。







Bitrix24ポータルのアプリケーションページには2つのボタンがあり、そのハンドラーについては前の投稿で説明しています。 1つのボタンでカスタムアクティビティをインストールし、2番目のボタンで削除します。



インストール後、アクティビティはビジネスプロセスエディタに表示されます。







カスタムアクティビティをビジネスプロセスに含めることができ、入力として定義した入力パラメーターを要求すると、動作します。







10ビジネスプロセスに含まれるカスタムアクティビティを削除するとどうなりますか?



この場合、ビジネスプロセスは正常に動作しなくなり、ビジネスプロセスエディタではこのアクティビティが赤で強調表示されます。



使用材料:



1) RESTを使用してBPを作成する際のマスタークラスのビデオ録画

2) トレーニングコース「Bitrix Framework Developer」、「Bitrix24 Marketplace」の章

3) Anton Dolganinのブログ「Logging JS Errors on the Server」への投稿




All Articles