使用肥皂或休息的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的经验。