2011-01-13 23 views
8

La documentación de Netsuite es bastante deficiente, cubren los aspectos básicos y luego le permiten explorar. Cualquier persona sin un vasto conocimiento de PHP tratando de usar su kit de herramientas php estaría de rodillas suplicando misericordia.Netsuite: cómo adjuntar campos personalizados a pedidos de cliente

En cualquier momento a lo largo de todo este proyecto ha sido un camino y un error, y tratando de encontrar sentido a todo hasta que las cosas comenzaron a funcionar.

Me da problemas para asignar campos personalizados a los pedidos de venta, sé que tiene que ser un objeto de un objeto para que nivele el xml para que el jabón se encargue, pero ¿con qué? ¿Qué?

Tengo un código que he trabajado que está llegando a algún lado pero se queja de que no es el tipo correcto de RecordRef. Si alguien trabajó con Netsuite y siente mi dolor, presteme su conocimiento antes de sacar todo el pelo.

Gracias de antemano.

Código:

$customFields = array('internalId' => 'custbody_new_die_yn','value' => array('name' => 'custbody_new_die_yn','internalId' => 'NO')); 
$customObject = new nsComplexObject("SelectCustomFieldRef"); 
$customObject->setFields($customFields); 

$salesOrderFields = array(

    'entity'  => new nsRecordRef(array('internalId' => $userId)), 
    'paymentMethod' => array('internalId' => 8), 
    'ccNumber'  => 4111111111111111, 
    'ccExpireDate' => date("c", mktime(0,0,0,11,1,2011)), 
    'ccName'  => 'Test Testerson', 
    'itemList' => array(
     'item' => array(
      'item'  => array('internalId' => 5963), 
      'quantity' => 5 
     ) 
    ), 
    'department' => new nsRecordRef(array('internalId' => 1)), 
    'class' => new nsRecordRef(array('internalId' => 47)), 
    'customFieldList' => $customObject 
); 
+0

He descubierto que tengo que crear prototipos de todas las interacciones de servicios web de Netsuite en Java utilizando la interfaz generada por Axis para descubrir cómo crear las consultas SOAP correctamente. Solo después de que lo tengo trabajando en Java trato de traducirlo al kit de herramientas de PHP. Siempre que sea posible, evito PHP con netsuite. – Craig

Respuesta

11

No estoy familiarizado con el uso de PHP Netsuite pero he hecho una buena cantidad de C#/trabajo neto Netsuite.. Como mencionó Craig, me resulta mucho más fácil utilizar un lenguaje como C# /. Net con una interfaz generada por Visual Studio para descubrir qué hay disponible en la API del servicio web Netsuite SuiteTalk.

Hay una buena cantidad de documentación sobre este tema en el Centro de ayuda de NetSuite, de ninguna manera todo lo que necesitará, pero un buen comienzo. Netsuite Help Center

Eche un vistazo a la sección SuiteFlex/SuiteTalk (Servicios web) específicamente esta página en Ids & Referencias. Using Internal Ids, External Ids, and References

Dicho esto, intentaré ayudar con un .net ejemplo & explicación de cómo agregar un campo personalizado a un pedido de cliente.

Éstos son algunos ejemplos de la adición de diferentes CustomFieldRefs:

//A list object to store all the customFieldRefs 
List<CustomFieldRef> oCustomFieldRefList = new List<CustomFieldRef>(); 

//List or Record Type reference 
SelectCustomFieldRef custbody_XXX_freight_terms = new SelectCustomFieldRef(); 
custbody_XXX_freight_terms.internalId = "custbody_XXX_freight_terms"; 
ListOrRecordRef oFreightTermsRecordRef = new ListOrRecordRef(); 
oFreightTermsRecordRef.internalId = <internalId of specific record in Netsuite>; 
//See the References link above for more info on this - trying to figure out typeId caused me a lot of pain. 
oFreightTermsRecordRef.typeId = <internalId of the List Record Type in Netsuite>; 
custbody_XXX_freight_terms.value = oFreightTermsRecordRef; 
oCustomFieldRefList.Add(custbody_XXX_freight_terms); 

//Freeform text sorta field    
StringCustomFieldRef objStringCustomFieldRef = new StringCustomFieldRef(); 
objStringCustomFieldRef.internalId = "custbody_XXX_tracking_link"; 
objStringCustomFieldRef.value = "StringValue"; 
oCustomFieldRefList.Add(objStringCustomFieldRef); 

//Checkbox field type 
BooleanCustomFieldRef custbody_XXX_if_fulfilled = new BooleanCustomFieldRef(); 
custbody_XXX_if_fulfilled.internalId = "custbody_XXX_if_fulfilled"; 
custbody_XXX_if_fulfilled.value = true; 
oCustomFieldRefList.Add(custbody_XXX_if_fulfilled); 

//By far the most complicated example a multi-select list referencing other records in Netsuite 
MultiSelectCustomFieldRef custrecord_XXX_transaction_link = new MultiSelectCustomFieldRef(); 
//internal id of field you are updating 
custrecord_XXX_transaction_link.internalId = "custrecord_XXX_transaction_link"; 

List<ListOrRecordRef> oListOrRecordRefList = new List<ListOrRecordRef>(); 

ListOrRecordRef oListOrRecordRefItemFulfillment = new ListOrRecordRef(); 
oListOrRecordRefItemFulfillment.name = "Item Fulfillment"; 
oListOrRecordRefItemFulfillment.internalId = <ItemFulfillmentInternalId>; 
//Item Fulfillment is record type (Transaction -30) - this is from the above Reference links 
oListOrRecordRefItemFulfillment.typeId = "-30"; 
oListOrRecordRefList.Add(oListOrRecordRefItemFulfillment); 

ListOrRecordRef oListOrRecordRefSalesOrder = new ListOrRecordRef(); 
oListOrRecordRefSalesOrder.name = "Sales Order"; 
oListOrRecordRefSalesOrder.internalId = <SalesOrderInternalId>; 
//Sales Order is record type (Transaction -30) - this is from the above Reference links 
oListOrRecordRefSalesOrder.typeId = "-30"; 
oListOrRecordRefList.Add(oListOrRecordRefSalesOrder); 

//Add array of all the ListOrRecordRefs to the MultiSelectCustomFieldRef   
custrecord_XXX_transaction_link.value = oListOrRecordRefList.ToArray(); 
oCustomFieldRefList.Add(custrecord_XXX_transaction_link); 

//And then add all these to the Custom Record List (Array) on the Sales Order Record 
objSalesOrder.customFieldList = oCustomFieldRefList.ToArray(); 

De lo que puedo decir en su ejemplo anterior Creo que su problema es con el ListOrRecordRef TypeId. Es difícil decir a partir de su ejemplo a qué tipo de letra hace referencia, pero si puede resolverlo y configurar TypeId en SelectCustomFieldRef, creo que debería solucionar su problema.

+0

Me di cuenta de esto probablemente 3-4 días después de haber publicado la pregunta a través del grupo de usuarios netsuite, finalmente alguien salió adelante. Fue exactamente lo que pensaste que el ListOrRecordRef era el problema después de que me dijeron cómo NS solo lo aceptaría, se volvió fácil entender por qué NS lo acepta de esa manera. Gracias por la información detallada, alguien buscará este día y lo encontrará útil y es por eso que estoy marcando esta respuesta. Gracias de nuevo. – Dreamcube

+0

@Rick, ¿sabe por casualidad si es posible identificar el tipoID programáticamente? En otras palabras, al conocer el nombre del campo personalizado, ¿hay alguna forma de determinar el CustomList actualmente asociado? – digitalsteez

+0

Tenga en cuenta que para StringCustomFieldRef realmente debería ser la propiedad scriptId y no la internalId. Aquí está cómo se vería esa línea ahora: objStringCustomFieldRef.scriptId = "custbody_XXX_tracking_link"; – theark40

Cuestiones relacionadas