使用肥皂或休息的PHP庫,用於以實用的方式與AFAS溝通。
這是庫代碼,供您自己的代碼/另一個項目使用。誰正在閱讀本文,據說已經對他們想要實現的目標和AFAS有所了解,因此我們不會在這裡解決。 (http://www.afas.nl/-他們的當前文檔位於https://static-kb.afas.nl/datafiles/help/help/help/2_9_7/se/endex.htm,儘管url無疑會更改。)
該代碼通過三個原則形成:
第一個(和第三)原理意味著可以理解的代碼比未來的可擴展性優選,該代碼可為每個小東西創建單獨的類,並引入鍋爐板代碼的負載。這意味著評論良好的代碼。這意味著沒有意外 /無證件行為。 (對輸入參數的驗證以及從遠程系統收到的結果涵蓋了程序員出乎意料的情況,並拋出了記錄的例外。)
也就是說:第二 /第三原則,加上不斷發展的AFAS功能以及向後兼容的考慮因素,在某些方面使Connection :: GetData()參數不合邏輯。但是,該代碼仍然很容易讀取(因為沒有很多不同的方法),並且易於稱呼“簡單”用例。
圖書館的版本2與PHP5(5.4及以上)和PHP7一起使用。
用於休息和肥皂的客戶端類使用PHP的標準捲曲 + JSON和SOAP + SIMEXML擴展;如果這些對您不起作用,則歡迎與新 /修改的客戶一起使用。
對於UpdateConnector類,在PHP5.6、7.1和7.2上進行自動測試。 (我目前不考慮需要測試的客戶端類。將來可能會進行一些連接的光測試,但不在我的列表中。)
儘管PHP5.6不再正式支持,但該庫將與之兼容,直到有真正的理由引入僅PHP7語言構造為止。
該庫的幾部分並非全部緊密結合:
客戶類可以獨立使用,以撥打AFAS連接器。您需要知道AFAS期望的休息或肥皂API的確切參數;兩者都有一個客戶。如果您想將事情保持在AFAS自己的結構附近,那麼剩下的客戶似乎最合適。使用RestCurlClclient(請參見下面的示例),然後忘記其他類。您需要知道的只是有一種公共方法Callafas(),它可以返回帶有成功的呼叫結果的(JSON)字符串,要么返回異常。
連接類包裹在肥皂或休息客戶端周圍,並抽像一些不容易處理的參數。如果您可以使用
updateObject(加上子類)可用於為更新連接器創建XML或JSON有效負載,並驗證其內容。它們的輸出是字符串,可以以任何方式使用(例如,通過客戶端類或通過Connection :: senddata()發送字符串數據,或將UpdateObjects與您自己的自定義代碼一起使用)。
還有一個輔助課程,具有一些額外的靜態方法,這對某些程序員可能很有用,但是我不想超載客戶端 /連接。 (此外,Isocountrytrait / knbasicAddress / orgpersonContact包含一些公共方法,程序員可以將這些方法用於其自己的自定義驗證EG地址,而無需使用這些類的主要功能。這些方法沒有進一步記錄。)
我們將首先討論客戶,並給出呼叫示例,以便與連接進行比較。您可以跳過這些,除非您對差異感到好奇。
如果您知道呼叫的結構,則可以獨立使用這些肥皂 /休息來促進AFAS的利潤。客戶類僅處理:
連接和身份驗證設置將傳遞到構造函數中;不是每個人的AFA呼叫。
您只會使用一種公共方法:callafas()。 (有第二種公共方法: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示例(除了它返回XML字符串而不是JSON字符串)。請注意,這不是PHP“肥皂”類;這是肥皂罐的包裝紙。
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>' ] );該連接圍繞客戶端,並抽象所有參數驗證 /數據處理,而不是特定於客戶端。它具有自己的過濾器語法。它有兩種重要的方法:senddata()包裝AFAS的更新連接器,以及包裝所有其他連接器的GetData()。 (所有其他方法都是您可能永遠不需要的Getters和Setter。)
等效於上述示例是:
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 ' );...因此,如果未提供“輸出模式”選項,則getData()改為返回數據行(即XML/JSON字符串將為您解碼)。
獲取連接器
更新連接器 / UpdateObject類
提示開發人員
我喜歡為世界貢獻開源軟件,我喜歡開放半掛起的記錄不足的系統。 (2012年的AFA是這種情況,但情況變得更好。)如果有用或有貢獻,請大喊大叫。如果您需要完成集成工作,請與我聯繫。 (我有其他幾個系統的經驗。)
該庫是根據MIT許可證獲得許可的 - 有關詳細信息,請參見許可證文件。
hat提示給Philip Vergunst和Nathan Vergunst -Kolozsvári @ your Source-生產第一個版本的PHP代碼,至少可以交換正確的數據,一定不容易。
大喊對電子商務策略 /營銷 /設計專業人士的Yellowgrape。當我在自己的無薪時製作了這件軟件時,沒有它們,我將無法獲得AFAS的經驗。