- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 所有 数据从 ServiceNow CMDB 数据表中提取到我自己的 SQL 数据库中。当数据在需要与新 SN 实现同步的客户遗留系统中维护时,我计划使用它进行自动更新。
我们的 SN 环境有很多域、很多客户等。这转化为大量数据。由于数据太大,尝试在单个 API 调用中提取所有记录自然会导致超时异常。 Web API建议批处理数据,这是我实现的:
...
var offset = 0;
while (true)
{
var requestUrl = string.Format("{0}/api/now/table/cmdb_ci_vm_instance?sysparm_offset={1}&sysparm_limit={2}&sysparm_exclude_reference_link=true", url, offset, batchSize);
var result = ApiRequest.Get(new Uri(requestUrl), _credential, null, out response);
if (result == HttpStatusCode.OK)
{
var virtualmachineRo = JsonConvert.DeserializeObject<VirtualMachineRootObject>(response);
if (virtualmachineRo.result.Count < batchSize)
{
virtualmachines.AddRange(virtualmachineRo.result);
break;
}
virtualmachines.AddRange(virtualmachineRo.result);
offset += virtualmachineRo.result.Count;
}
else
{
break;
}
}
....
我曾处理过不同的批处理大小,它给了我不同的结果。根据我打的是哪个表,有时我会得到重复项,有时我不会,有时我会得到不同的重复项。在几乎所有情况下,当我DO 得到一个副本时,副本会替换流中的有效记录,这意味着我“丢失”了一个有效记录。
我已通过查看来自 serviceNow 的原始数据流并查看重复项,并验证 ServiceNow 中是否存在未显示在我的流中的记录(通常在我尝试创建丢失的数据时发现)来确认这一点记录和 SN 响应“忽略 - 没有字段更改”表明记录已经存在。)
我试图搜索并找到任何有类似问题的人,但没有找到任何东西。在直接使用 SN 开票之前,我希望看看我的代码是否有什么地方做错了,或者这是否符合我的预期 - 一个与平台相关的错误。
最佳答案
所以这几乎可以肯定是他们的 API 中与服务帐户访问相关的错误。这是我所做的,以及我认为正在发生的事情(以及我的工作!)
在尝试了一些不同的逻辑之后,我遇到了以下情况:
{0}/api/now/table/cmdb_ci_vm_instance?sysparm_offset=0&sysparm_limit=750&sysparm_exclude_reference_link=true&sysparm_query=ORDERBYsys_id
2016-08-19 12:46:15,277 [INFO ] Returned Records Count: 750
{0}/api/now/table/cmdb_ci_vm_instance?sysparm_offset=750&sysparm_limit=750&sysparm_exclude_reference_link=true&sysparm_query=ORDERBYsys_id
2016-08-19 12:46:28,243 [INFO ] Returned Records Count: 746
注意第二遍我要求750条记录,但只得到746条(相差4.)其他批处理继续正常返回750条,最后我在5200+条中正好有4条重复检索到的记录总数。因为第二遍返回的值少于我要求的 750,所以我的代码被破坏了,因为它认为数据是完整的...
为了解决这个问题(最初)我对上面的代码做了以下操作:
if (virtualmachineRo.result.Count == 0)
{
//AddRange(virtualmachineRo.result);
break;
}
我不再相信仅仅因为返回的记录数少于我检索所有记录的 sysparm_limit。
看起来当从数据库中提取数据时,一个单独的进程会根据您的权限过滤数据。因此,第二批删除了 4 条记录 - 但数据库不知道更好......所以在下一次通过 746 调用返回的实际计数增加我的偏移量时,它返回相同的数据集和最后一次该批处理的4条记录被复制为下一页数据中的前4条记录。 (在数据流中确认 - 排序数据时,它会导致重复出现在不同的地方,并且不同的记录也会根据批处理大小/顺序重复!)
我不敢相信这是有意为之的行为,而且 Wiki 中肯定没有记录。无论哪种方式,解决方法对于遇到此问题的任何人来说都很简单:即使返回的计数小于批大小,您也必须继续提取数据,并继续直到返回 0 条记录。然后你必须用一些简单的东西过滤掉重复项:
yourrecords.GroupBy(x => x.sys_id).Select(x => x.First()).ToList();
问题就“解决了”。
关于c# - ServiceNow 表 API 返回重复项/不返回所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39020346/
我是 Servicenow 的新手,正在研究 ServiceNow 的功能。我试图了解我们如何在 ServiceNow 中实现标准开发最佳实践。 版本控制 CI/CD 源代码集成与代码审查 到目前为止
有没有一种方法可以对返回表的单个列的ServiceNow REST API执行REST调用?我只想在服务器表中查询服务器的名称,而没有整个记录包含返回的50多个字段。 最佳答案 最新的REST Tab
我看到更新集中未捕获对计划脚本执行的任何更新。 捕获更改的标准是什么? 我们可以手动配置要在更新集中捕获和不捕获的项目列表吗? 最佳答案 具有 update_synch 属性的表设置为 true 会在
我有一个需要在事件更新之前运行的业务规则。问题是这个脚本需要从“脚本包含”中触发一个很慢的函数。我希望这个调用是异步的,以便可以加载表单。 有没有办法做到这一点? 最佳答案 我假设您已经知道 asyn
我是 ServiceNow 的新手并遵循了本教程 Workflow for Servicenow Incidents为批准请求创建一个简单的工作流。 我在开发人员实例的工作室中采取的步骤: 创建了一个
在ServiceNow中,我在业务登录-脚本操作中编写了脚本。添加和删除时我得到 sysId,但重命名附件时我无法获得 sys_id。 sendnotification(); function s
我正在尝试在 ServiceNow 中创建一个小部件,根据用户的位置和职业显示与用户相关的所有知识文章。在某些情况下,应该返回多篇 KA 文章,而我想动态创建一个表来列出所有适用的文章。下面是我的服务
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
当比较两个日期时,如何获得两个日期对象之间的天数差异? (例如 - 2017-07-31 和 2017-07-28 --> 这应该返回 3 天)。 UNIX 时间戳将不起作用,因为它对我的情况不准确
我正在尝试编写一个包含编码查询的查询,但我不确定我的语法是否正确(99.9% 是完全错误的)。我希望此查询循环遍历所有可用的知识文章,并根据工作系列和位置为用户提供正确的文章。第一步是获取用户的工作系
我正在 ServiceNow 平台中编写验证脚本。我需要验证记录制作者和服务目录项的表单数据。如何在服务器端正确验证表单数据而不被客户端脚本调用?我已经有一个目录客户端脚本,可以在脚本包含中调用服务器
我正在 ServiceNow 中创建一个前端门户,它需要使用 g:evaluate 来调用来自不同表的变量。 例如: var gr = new GlideRecord('sys_user'); gr
我们公司使用 ServiceNow 来跟踪用户报告的事件。为了关注调用解决情况,我们的服务台会查看积压工作图表以关注趋势。待办事项图表是使用此处提供的相同代码生成的: http://wiki.serv
我正在尝试实现一个查询表并检查某些条件的脚本。如果为真,那么它将插入一个事件。 我不确定哪里出了问题,我猜是 while 循环。 我是 servicenow 中的脚本新手,如果有人可以提供帮助。代码如
在ServiceNow ,我在 SOAP 请求中最多只能获得 250 记录。如何获取所有记录? Web Reference Url = https://*****.service-now.com/rm
我用 C# 创建了一个聊天机器人,它配置为 Luis,并在提出问题时给出某种答复。但我想使用这个聊天机器人在 Servicenow 中创建事件。聊天机器人会询问一些问题,例如“问题是什么?”或“简短描
我有一个客户端脚本,它执行 GlideRecord 查询来检查是否已存在同名记录。 如果找到匹配的记录,我们需要停止提交表单。 我们在 CMS 门户上运行良好。 但是,新的 Service Porta
我目前在赫尔辛基发布 无法理解标签标签内的美元符号和花括号的用途 ${Location} 天气小部件的完整html: ${Location} ${Go}
我需要在页面加载时将占位符添加到服务门户下目录项中的文本字段,我尝试使用 jquery 和 Angular/Document 在目录客户端脚本中尝试,但没有成功,并发现它不支持任何其他替代解决方案?
我在用python编写一个报告工具,它可以从servicennow的json web服务中获取数据。我们的servicenow实例使用普通用户id/pw身份验证和sha-1认证。我的问题是,我无法使用
我是一名优秀的程序员,十分优秀!