SOAPまたはRESTを使用して、AFAS利益とのコミュニケーションを実用的に通信するためのPHPライブラリ。
これは、独自のコード/別のプロジェクトで使用するライブラリコードです。これを読んでいる人は誰でも、おそらく彼らが何を達成したいのか、AFAが何であるかについてのアイデアを持っていると思われるので、ここではそれに対処しません。 (http://www.afas.nl/-現在のドキュメントはhttps://static-kb.afas.nl/datafiles/help/2_9_7/se/en/index.htmにありますが、そのURLは間違いなく変化します。)
このコードは、3つの原則を通じて形成されました。
最初の(および3番目の)原則は、将来の拡張性よりも理解可能なコードが優先されることを意味します。それはよくコメントされたコードを意味します。そして、それは予期しない /文書化されていない行動を意味しません。 (入力引数の検証、およびリモートシステムから受け取った結果の検証は、プログラマーにとって予想外の状況をカバーし、文書化された例外をスローします。)
とはいえ、2番目 / 3番目の原則に加えて、進化するAFAS機能と後方互換性の考慮事項により、いくつかの側面で非論理的な接続:: getData()の引数が作成されました。しかし、コードはまだかなり簡単に読みやすく(多くの異なる方法がないため)、「単純な」ユースケースを簡単に呼び出すことができます。
ライブラリのバージョン2は、PHP5(5.4以降)およびPHP7で動作します。
休憩と石鹸のためのクライアントクラスは、PHPの標準Curl + JSONおよびSOAP + SimplexML拡張機能を使用します。これらがあなたのために機能しない場合、新しい /修正されたクライアントを備えたPRSは大歓迎です。
UpdateConnectorクラスでは、自動テストがphp5.6、7.1、7.2で行われます。 (現在、テストが必要なクライアントクラスを検討していません。将来的には接続のための軽いテストがあるかもしれませんが、私のリストにはありません。)
PHP5.6は公式にはサポートされていませんが、このライブラリは、PHP7のみの言語コンストラクトを導入する本当の理由があるまで、それと互換性があり続けます。
このライブラリには、すべてがしっかりと結合されているわけではない部分がいくつかあります。
クライアントクラスを使用して、AFASコネクタを呼び出すためにスタンドアロンを使用できます。 AFAが休息またはSOAP APIに期待する正確なパラメーターを知る必要があります。両方のクライアントがあります。物事をAFAS自身の構造に近づけたい場合は、RESTクライアントが最も適しているようです。 RestCurlClient(以下の例を参照)を使用し、他のクラスを忘れてください。知っておく必要があるのは、1つのパブリックメソッド、Callafas()があることだけです。これは、コール結果が成功した(JSON)文字列を返すか、例外をスローすることです。
接続クラスは、SOAPまたはRESTクライアントを包み込み、それほど簡単に処理できないパラメーターを抽象化します。たとえば、それを使用してください
UpdateObject(Plus Child Classe)を使用して、ConnedterのXMLまたはJSONペイロードを作成し、コンテンツを検証できます。それらの出力は文字列であり、必要な方法で使用できます(たとえば、クライアントクラスを介して文字列データを送信するか、Connection :: SendData()を介して、または独自のカスタムコードでupdateObjectsを使用します)。
また、一部のプログラマーに役立つ可能性のあるいくつかの追加の静的メソッドを備えたヘルパークラスもありますが、クライアント /接続に過負荷をかけたくありませんでした。 (また、ISOCOUNTRYTRAIT / KNBASICADDRESS / ORGPERSONCONTACTには、プログラマーがこれらのクラスの主な機能を使用せずに、EGアドレスの独自のカスタム検証に使用できるいくつかのパブリックメソッドが含まれています。これらはさらに文書化されていません。)
まず、クライアントについて話し合い、比較目的で接続とのコール例を挙げます。違いに興味がない限り、これらをスキップできます。
これらは、コールの構造を知っていれば、SOAP / RESTコールをAFASの利益にするためにスタンドアロンを使用できます。クライアントクラスのみを扱うのは次のとおりです。
接続と認証の設定がコンストラクターに渡されます。すべての個々のAFASコールにはありません。
1つのパブリック方法のみを使用します:callafas()。 (2番目のパブリック方法があります:static getClientType() - しかし、これはスタンドアロンの使用には必要ありません。)クライアントクラスは、(ほぼ)リモートAPI呼び出しに関する仮定を(ほぼ)行いません。正確な(タイプの)リモートメソッドと引数を渡す必要があり、結果本体を文字列として返します。
必要なオプションは、以下のコンストラクターにあります。他のオプションについてはコードを参照してください。
use PracticalAfas Client RestCurlClient ;
$ client = new RestCurlClient ( [ ' customerId ' => 12345 , ' appToken ' => ' 64CHARS ' ] );
$ result_as_json_string = $ client -> callAfas (
' GET ' ,
' connectors/MyGetConnectorName ' ,
[ ' take ' => 1000 ,
' filterfieldids ' => ' SomeCategory,Updated ' ,
' filtervalues ' => ' CategName,2017-01-01T16:00:00 ' ,
' operatortypes ' => ' 1,4 ' ,
' orderbyfieldids ' => ' -Updated '
]
);
$ attachment = $ client -> callAfas ( ' GET ' , ' subjectconnector/123 ' );
// This is inserting a new organisation with only its name filled:
$ client ->callAfas( ' POST ' , ' connectors/KnOrganisation ' , [], ' {"KnOrganisation":{"Element":{ "Fields":{"MatchOga":0,"Nm":MyCompany Ltd."}}}} ' 以下は、上記のRESTの例に(ほぼ)相当します(JSON文字列の代わりにXML文字列を返すことを除く)。これはPHP 'Soapclient'クラスではないことに注意してください。 Soapclientの周りのラッパーです。
use PracticalAfas Client SoapAppClient ;
$ client = new SoapAppClient ( [ ' customerId ' => 12345 , ' appToken ' => ' 64CHARS ' ] );
$ result_as_xml_string = $ client -> callAfas (
' get ' ,
' GetDataWithOptions ' ,
[ ' connectorId ' => ' MyGetConnectorName ' ,
' take ' => 1000 ,
' filtersXml ' => ' <Filters><Filter><Field FieldId="SomeCategory" OperatorType="1">CategName</Field>
<Field FieldId="Updated" OperatorType="4">2017-01-01T16:00:00</Field></Filter></Filters> ' ,
' options ' => ' <options><Index><Field FieldId="Updated" OperatorType="0"/></Index>
<Outputoptions>3</Outputoptions><Outputmode>1</Outputmode><Metadata>0</Metadata></options> ' ,
]
);
$ attachment = $ client -> callAfas ( ' subject ' , ' GetAttachment ' , [ ' subjectID ' => 123 ] );
$ client ->callAfas( ' update ' , ' Execute ' , [ ' connectorType ' => ' KnOrganisation ' , ' dataXml => ' <KnOrganisation xmlns:xsi="http: //www.w3.org/2001/XMLSchema-instance"><Element><Fields Action="insert"><MatchOga>0</MatchOga><Nm>MyCompany Ltd.</Nm></Fields></Element></KnOrganisation>' ] );接続はクライアントを包み込み、クライアント固有ではないすべての引数検証 /データ処理を抽象化します。フィルター用の独自の構文があります。 2つの重要な方法があります。AFASの更新コネクタをラップするSendData()と、他のすべてのコネクタをラップするgetData()。 (他のすべての方法は、あなたが決して必要ないかもしれないゲッターとセッターです。)
上記の例に相当するのは、次のとおりです。
use PracticalAfas Connection ;
use PracticalAfas Client RestCurlClient ;
$ client = new RestCurlClient ( [ ' customerId ' => 12345 , ' appToken ' => ' 64CHARS ' ] );
$ connection = new Connection ( $ client );
// A (more common) example for a Get connector with simple filter, returning an
// array of rows:
$ result_as_array = $ connection -> getData ( ' MyGetConnectorName ' , [ ' SomeCategory ' => ' CategName ' ] );
// The equivalent of above:
$ result_as_string = $ connection -> getData (
' MyGetConnectorName ' ,
[ ' SomeCategory ' => ' CategName ' ,
[ ' Updated ' => ' 2017-01-01T16:00:00 ' , ' #op ' => Connection:: OP_LARGER_THAN ],
],
Connection:: GET_FILTER_AND ,
[ ' take => 1000,
' orderbyfieldids' => ' -Updated ' ,
' options ' => [ ' Outputmode ' => Connection:: GET_OUTPUTMODE_LITERAL ]
]
);
$ attachment = $ connection -> getData ( 123 , [], Connection:: DATA_TYPE_SUBJECT );
$ connection -> sendData ([ ' name ' => ' MyCompany Ltd. ' ], ' KnOrganisation ' , ' insert ' );...したがって、「outputMode」オプションが提供されていない場合、getData()は代わりに一連のデータ行を返します(つまり、XML/JSON文字列がデコードされます)。
コネクタを取得します
コネクタ / UpdateObjectクラスを更新します
開発者向けのヒント
私は世界にオープンソースのソフトウェアを提供するのが好きで、半閉鎖された未文書のシステムを開くのが好きです。 (2012年にはAFASの場合でしたが、良くなりました。)これが有用であるか、貢献している場合は叫び声を上げてください。統合作業が必要な場合は、私に連絡してください。 (私は他のいくつかのシステムの経験があります。)
このライブラリは、MITライセンスの下でライセンスされています - 詳細については、license.mdファイルを参照してください。
Philip Vergunst&Nathan Vergunst -Kolozsváriへの帽子のヒント @あなたのソース - 少なくとも正しいデータを交換したPHPコードの最初のバージョンを作成することは、簡単ではなかったはずです。
eコマース戦略 /マーケティング /デザインの専門家、Yellowgrapeへの叫び。私は自分の無給の時間にこのソフトウェアを作成しましたが、それらなしではAFASの経験はありませんでした。