同步Paypal付款记录到NetSuite并核销或者记录存款的最小方案一例

Paypal提供了API供用户调取付款的订单信息,编写SuiteScript调取这个接口可以实现一个功能简单的Paypal付款与NetSuite集成,从而为系统已有的发票(Invoice)创建付款(Payment),对没有发票的订单创建客户存款(customer deposit)。本文仅提供思路和技术要点,并不是可以运行的代码;而实际应用场景中,由已有的逻辑可以灵活扩展到更多的功能。 前提 系统已有其他的方案集前台电商网站(BigCommerce、Shopify、Magento等等),电商网站的订单会被同步到NetSuite中。 设计要点 本章节对方案的一些技术要点着重介绍一下。 Paypal API的验证类型 Paypal采用的是OAuth2.0验证,因此每次请求之前需要先获取token,然后请求数据。对于Paypal的token获取请求和请求数据的请求,都需要在请求的头部声明'Accept': 'application/json',否则会提示错误MEDIA_TYPE_NOT_ACCEPTED。 Paypal API的选择 我选用的是https://api-m.paypal.com/v1/reporting/transactions,这个请求的结果包含了所有的客户付款、手续费等等信息,对于客户付款的记录则包含了币种、发票号码的信息。这个API我使用了3个参数:时间范围、状态、类型。 你可能也可以选取其他report类型的API,或者在transactions的API上找到更多功能。具体参考https://developer.paypal.com/docs/api/transaction-search/v1/#search_get Paypal API请求数据的时间问题 Paypal使用的是UTC时间戳,没有时区背景。所以为了避免混乱(此方案将在中国使用,而客户主要是北美)推荐使用前一天日期。 功能流程 方案开发完成将是一个MapReduce的脚本,每天在运行一次,获取前一天的结果。 在getIntputData阶段,请求数据,并生成一个多行的自定义记录,每一行包括了如下信息: 在Map阶段,对于状态不是已核销的自定义记录,查找Invoice的编号和状态,尝试创建payment或customer deposit,对必填字段赋值。 在Summarize阶段,对成功与失败的记录生成log,给管理员和财务人员发送提示邮件。

NetSuite Restlet使用OAuth2.0(以Postman访问为例)

SuiteCloud(SuiteTalk REST Web Services)现在通常适用于所有NetSuite产品,扩展了一组强大的补充SuiteTalk SOAP Web Services,这些Web Services已经成为NetSuite核心集成解决方案的一部分,已经有几个版本发布了。在SuiteTalk中包括REST Web Services为管理员和开发人员提供了更多集成NetSuite与环境、外部应用程序和数据源的选项。 REST Web Services支持API可发现性,提供基于链接的导航,为用户提供无缝访问NetSuite记录元数据,并为用户提供与自定义和标准记录交互的统一方法。 与用于构建基于REST的集成的服务器端RESTlets相比,无需编写服务器端代码或管理自定义代码。 此博客展示了如何在您的NetSuite帐户中使用OAuth 2.0构建基于REST的集成,以及Postman环境设置和POST请求。 要使用REST Web Services,必须在您的NetSuite账户中启用相关功能 分配所需权限给用户角色 创建使用OAuth 2.0的应用程序的集成记录的步骤如下: 一旦单击保存按钮,客户端凭据值将显示在页面上。 注意:出于安全原因,这只会显示一次;确保您记下它们。 NetSuite提供一个特定于账户的域,包含NetSuite账户ID作为域名的一部分,以访问REST Web Services或RESTlets。您可以在“设置”>“公司”>“公司信息”下的“公司URL”子选项卡中找到公司的URL。 设置Postman环境: Postman环境是您可以在Postman请求中使用的一组变量。使用Postman环境,您可以在各种NetSuite帐户之间切换,以及在测试或生产帐户之间切换。使用Postman环境,您可以使用变量自定义请求,以便在不更改请求的情况下切换不同的设置。 创建Postman集合: 您可以通过单击左侧边栏中的“+ New”按钮、New>单击显示的Collection 选项来创建新的集合。将弹出一个新窗口。 RESTlet POST请求: 创建新集合后,单击“添加请求”以创建第一个请求{{proto}}://{{account}}.{{restletsapi}}.{{nsdomain}}/app/site/hosting/restlet.nl?script=<>&deploy=<> 总结和必要的步骤是:

创建公司间客户和供应商

公司间客户和供应商是 NetSuite 用于公司间交易的具有一个或多个指定子公司的实体记录。他们在子公司之间的交易中代表买方和卖方。内部公司客户的默认应收账款科目必须是内部公司应收账款科目。对于内部公司供应商,默认应付账款必须是内部公司应付账款。 您在销售订单和采购订单上输入公司间实体以创建公司间交易。创建高级内部公司日记帐分录时,您还可以在日记帐行上识别内部公司客户或供应商。您必须为包含公司间应收帐款或公司间应付帐款的行输入公司间实体。有关设置公司间帐户的信息,请参阅公司间帐户。 公司间客户和相应的公司间供应商示例 您可以为每个具有公司间交易的子公司到子公司关系手动创建公司间客户和相应的公司间供应商。例如,如果英国子公司从美国子公司购买产品,则创建以下实体来代表子公司: 一个实体记录只能充当一个子公司的代理。如果英国子公司也从欧盟子公司采购,您必须: 在手动创建公司间客户和供应商之前,您必须自定义客户和供应商表单以包含“代表子公司”字段。要自定义表单,请转至自定义 > 表单 > 条目表单(管理员)。将“代表子公司”字段添加到标准客户和标准供应商表单中。有关自定义表单的信息,请参阅创建自定义条目和交易表单以及配置字段或屏幕。 要手动创建公司间客户: 有关分配给客户记录的多个子公司的信息,请参阅将子公司分配给客户。 要手动创建公司间供应商: 有关分配给供应商记录的多个子公司的信息,请参阅将子公司分配给供应商。

日记账记录 CSV 导入中的子公司ID无效

原因#1 子公司状态问题 检查子公司是否存在并确保未选中“Inactive” 原因#2 公司名称 验证子公司名称与其子公司记录完全相同,可在“设置”>“公司”>“子公司”中找到子公司记录。子-父关系必须映射如下 这意味着子名称按照从高级别到低级别的顺序连接,用 分隔<space><colon><space> 使用内部 ID 代替公司名称可能会省去您的麻烦。进行字段映射时,选择“选择引用类型 = 内部 ID” 。

Invalid subsidiary reference key on CSV Import of Journal Entry

Reason #1 Subsidiary Status Problem Check the subsidiary existence and make sure Inactive is unchecked Reason #2 Company Name Verify the subsidiary name is exactly the same as its subsidiary record, which can be found in Setup > Company > Subsidiaries. A child-parent relationship must be mapped as below which means subsidiary names are concatenated... » read more

用户希望在事务处理的行中出现特定货品时启动工作流

场景 用户希望在交易记录中出现特定项目时启动工作流。 解决方案 目前,工作流管理器没有直接访问子列表的功能。作为替代方案,创建一个保存搜索来确定交易记录中是否包含特定项目。确保将保存搜索设置为公共的。 创建保存搜索时,请参考以下标准: 类型为<事务处理的类型>主行为真货品为<选择项目>

自定义段(custom segment)无法添加到事务处理(Transaction Search)的结果列Column中

问题: 一个自定义段已经应用到了销售类事务处理上,但是这个段没有办法作为事务处理的视图的列使用。把相关自定义记录的权限添加到自定义的角色上问题仍然存在。Role->Permissions->Custom Record as <recordname> level = Edit 解决方案: 这个自定义段在自定义记录中的体现实际上遵循的还是自定义记录的权限列表(permission list)。这个列表实际上指的是该自定义段的权限标签。

Custom Segment Not Showing in Transaction Search Column

Problem: A custom segment which applies to sales transactions is not showing in transaction search columns. The problem persists after adding the custom record permission to Role->Permissions->Custom Record as <recordname> level = Edit Solution: The presentation of the custom segment in the custom record types is following its permission list, which is referencing the permission... » read more