さて、XMLRPC ライブラリを使用してそれを理解しました。それはあなたのような正確なライブラリではありませんが、ここで共有するものが役立つと思います. サンプルコードは次のとおりです。
// set up the overall message parameters
$msg = new xmlrpcmsg('execute');
$msg->addParam(new xmlrpcval(self::DBNAME, "string"));
$msg->addParam(new xmlrpcval($uid, "int"));
$msg->addParam(new xmlrpcval(self::PASSWORD, "string"));
$msg->addParam(new xmlrpcval($someObject->getOpenERPName(), "string"));
$msg->addParam(new xmlrpcval("write", "string"));
$msg->addParam(new xmlrpcval($someObject->getId(),"int"));
// prep the many2many data
// yes, this is ridiculous, and hard to understand!
$m2m = new xmlrpcval(
array(
new xmlrpcval(
array(
new xmlrpcval(6,"int"),
new xmlrpcval(0,"int"),
new xmlrpcval(
array(
new xmlrpcval(35,"int"), // id of the object at the other side of the relation
new xmlrpcval(52,"int"), // id of the object at the other side of the relation
),"array")
), "array")
),"array");
// package all the data
$data = array(
"field1"=>new xmlrpcval($someObject->getField1(),"string"),
"field2"=>new xmlrpcval($someObject->getField2(),"int"),
"field3"=>$m2m,
);
// add the data to the message
$msg->addParam(new xmlrpcval($data,"struct"));
// send the message
$client_object = new xmlrpc_client(
"http://".self::HOST.":".self::PORT."/xmlrpc/object"
);
$resp = $client_object->send($msg);
基本的に、あなたはである構造を持たなければなりません[[6,0,[id1,id2,id3,etc.]]]
。XMLRPC では、すべての値を xmlrpcval オブジェクトに適切にパックする必要があり、非常に読みにくくなります。
私が構築しているシステムでは、何が起こっているのかを理解するのがそれほど難しくないように、これらすべてをパッケージ化し、いくつかのヘルパー関数にリファクタリングしました。それにしてもお尻が痛い!