1CとMegaplanの統合、またはWebサービスが優れている理由

Habrには、1Cと、他のシステムと統合する「貧弱な」能力に関する多くの記事が既にあります。 そして、私は彼らに同意し、1CとMegaplanを統合することは、当初思っていたよりもはるかに不快な作業であることが判明しました。



この記事では、最初から最後までWebサービスを使用してAPIを介して同期を取り、構成する方法については説明しません。 しかし、不足している情報を見つけても問題にならない重要なポイントを説明します。



背景


私は1C部門に行きました。そこでは、「PM」というタスクを受け取って管理するためにスタッフが独自の構成を作成しました。 時間が経つにつれて、構成は新しい機能を開発および取得し、1C部門だけでなく、保有するすべてのIT部門のタスクを受信および処理するための単一のセンターになったため、それを放棄することはできなくなりました(執筆時点では、システムの導入について議論されています管理部門および建物保守部門)。 設定では、LDAP、すべての保持ベース、自動スカイプ通知などとの同期が設定されました。



物語


副テクニカルディレクターが採用され、ペイントでメガプラナの利点を説明し、経営者にそれを実装することが不可欠であると確信させました。 「RM」を拒否できないという長い説明の後、構成とMegaplanを同期する作業を任されました。 忍耐の大部分を武器に、私は可能性を研究し始め、すぐにMegaplanaにはAPIしかなく、そこを掘る必要があることに気付きました。 数日間の検索と実験の後、1Cだけがこれを実行できないことが明らかになりました。



これが、Webサービスが優れている理由の説明が始まる場所です。


残念ながら、すでに1つのWebサーバーが構成されており、そこにWebサービスを接続しました。 このため、Webサーバー自体の構成を説明することはできません。



パート1のセットアップ:Webサービスパーツのセットアップ。


Megaplanのおかげで、APIライブラリがあり、すべてが機能しているため、データモデルのみを構成できます。 例として、コメントを追加します。



1Cから呼び出す方法を説明します



/** * Marks comment as read * * @access public * @param object $data * @return array */ public function comment_create($data) { $options = array( 'method' => 'post', 'useHttps' => true, ); return $this->send_request(__FUNCTION__, $data, $options); }
      
      







メソッドモデルについて説明します



  require APPPATH.'controllers/common/common_types.php'; $types = array_merge_recursive( $types, array( // api methods 'methods' => array ( 'comment_create' => array( 'type' => 'public', 'returnType' => 'CommentEditReturn', 'description' => 'create comment', 'params' => array( 'data' => array( 'varName' => '$data', 'varType' => 'CommentEditInput', ), ) ), ), // api custom types for api methods 'types' => array( 'CommentCreateModel' => array( 'Text' => 'string', 'Work' => 'int', 'WorkDate' => 'string', 'Attaches' => 'CommentAttachment[]', ), 'CommentAttachment' => array( 'Add' => 'CommentAttachmentItem[]', ), 'CommentAttachmentItem' => array( 'Name' => 'string', 'Context' => 'string', ), ), ) );
      
      







次に、WebサービスがyourDomain / api / comments / get_wsdlに表示され、移行時にWebサービスの説明を含むXMLが表示されたとします。



パート2のセットアップ:1Cパートのセットアップ。


次に、Webサービスを構成に追加し、開いて、見てみましょう。実際に説明したすべてのメソッドは、消えていないものです。 もちろん、もっと大きな方法があります。





そして最後に、最もエキサイティングなことは1Cコードを書くことです。



 //   (,,=,=)   =.;  = .(.,.,"");  .status.code = "ok"   = WS.WSMegaPlanComments.WS("urn:comments","commentsService","commentsPort");  = .XDTO.(.XDTO.("urn:comments", "CommentEditInput")); .AccessId = .data.AccessId; .SecretKey = .data.SecretKey; .SubjectType="task"; .SubjectId=((),"=0");  = .XDTO.(.XDTO.("urn:comments", "CommentCreateModel")); .Text= XML(); .Work=; .WorkDate=(,"='dd.MM.yyyy hh:mm:ss'"); .Model=;  = .comment_create();  ;   " :     ."; ;   " :"+ . + (); ;  //  (, , )    = WS.WSMegaPlanTasks.WS("urn:tasks","tasksService","tasksPort");  = .XDTO.(.XDTO.("urn:tasks", "AuthorizationData")); .Login = ;  = ""; md5(, ); .Password = ; .OneTimeKey = ;  .authorize();   = ();  " :"+ . + .; ; 
      
      







実際にはすべて。 今では、必要な場所で関数呼び出しを固定するだけで、それだけです。 Megaplanは1Cからコメントを受け取ります。



All Articles