0

私はOpenERP 6.1.1に接続するためにPHPでXML-RPCを含むプロジェクトに取り組んでいます

many2many 関係、正確には product.template オブジェクトの supply_taxes_rel を更新する関数を作成する必要があります。

Python では、「supplier_taxes_id = '[(6,0,[38, 40])]」とします。

現在、「 https://github.com/b3ni/openerplib 」の「openerplib.php」を使用していますが、ライブラリはこの機能をサポートしていません。

4

1 に答える 1

1

さて、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 オブジェクトに適切にパックする必要があり、非常に読みにくくなります。

私が構築しているシステムでは、何が起こっているのかを理解するのがそれほど難しくないように、これらすべてをパッケージ化し、いくつかのヘルパー関数にリファクタリングしました。それにしてもお尻が痛い!

于 2014-01-09T06:44:13.610 に答える