2015-09-17 57 views

回答

3

在SuiteScript,你可以加载你想检查记录的一个实例,然后调用其getAllFields方法:

var record = nlapiLoadRecord('customrecord_summaryinvoice', 'anyInternalIdHere'); 
var fieldNames = record.getAllFields(); 

// Do whatever you need to with fieldNames... 

不幸的是,我不熟悉的Web服务足以推荐的在那里接近。

+0

我想有一个跟进的问题 我)我将如何得到,如果所有的自定义记录列表,以及 II)记录类型不存在,我们不能提取出我们首先需要创建记录的字段 我们是否有解决上述2个问题的方法? – Anshul

+1

不幸的是NetSuite的元数据发现不足。我不知道通过编程获取所有自定义记录的列表的好方法。第二个问题的一个选择是手动创建该类型的单个记录,然后将其标记为非活动状态。您仍然可以使用'nlapiLoadRecord'加载非活动记录,但它不会显示在普通搜索结果或其他列表中。 – erictgrubaugh

+0

感谢egrubaugh360 会编写一个爬行程序来提取数据并获取元数据/自定义记录列表,这是一个很好的解决方案吗? – Anshul

0

在SuiteTalk中有一个API调用,您可以调用它来返回所有自定义记录的元数据(scriptId,internalId)。

我使用C#:

public Dictionary<string, string> GetCustomization() 
{ 

    Dictionary<string, string> customRecords = new Dictionary<string, string>(); 

    // gets metadata for all custom records. 
    CustomizationType ct = new CustomizationType() { 
     getCustomizationType = GetCustomizationType.customRecordType, 
     getCustomizationTypeSpecified = true 
    }; 

    GetCustomizationIdResult cr = _myNetSuiteWebReference.getCustomizationId(ct, false); 

    foreach (CustomizationRef re in cr.customizationRefList) 
    { 
     customRecords.Add(re.scriptId, re.internalId); 
    } 

    return customRecords; 
} 

如果您已经下载使用Web服务的记录,你可以使用反射来获取对象的属性。

我将使用一个销售订单记录只是一个例子:

RecordRef rr = new RecordRef(); 
rr.internalId = "123456789"; 
rr.typeSpecified = true; 
rr.type = RecordType.salesOrder; 

ReadResponse readr = Get(rr); 
// cast so a sales order object. 
SalesOrder so = (SalesOrder)readr.record; 

so.getType().getProperties(); // returns an array of PropertyInfo. 
foreach(System.Reflection.PropertyInfo pi in so.getType().getProperties()) 
{ 
    Console.WriteLine(pi.Name); 
}