SugarCRM 从 SugarBean 字段中获取有效的 TimeDate
SugarCRM Get an effective TimeDate from a SugarBean field
我肯定遗漏了一些明显的东西,但我似乎无法找到一种方法从 SugarBean 字段的值中获取 TimeDate 对象。
假设我通过这种电话获得了特定的潜在客户:
$lead = BeanFactory::retrieveBean('Leads', "18bfc69e-8cd4-11e7-ad08-000c29b1a36e");
然后对此的任何调用:
$lead->date_entered
将return一个字符串值:"2017-08-29 16:05"
(注意没有秒)。
那么,例如,如果我尝试使用这样的值来创建 SugarTimeDate:
$TimeDate = new TimeDate();
$SugarTimeDate = $TimeDate->fromDb($lead->date_entered);
它将 return 为假,因为提供给 fromDb()
的值格式不正确(缺少秒数)。
在使用 Toad 查看 SQL table 时,我可以看到信息作为 DateTime 有效地存储在数据库中,值为 08/29/2017 16:05:56
。但是 SugarBean 对象将其作为格式不完整的文本提供。
那么如何从给定 SugarBean 中的字段(最好是对象)中获取有效的 SugarTimeDate、TimeDate 或 DateTime?
我进行了搜索,我发现的所有示例都是关于从 Now 创建一个新的日期对象以设置为 SugarBean 中的一个字段,但是 none 从现有的日期时间字段设置一个日期时间字段。
任何提示将不胜感激。
我不是 100% 清楚你想要完成的事情(见我的评论),但我猜你想要的是 fromUser() 函数,即
$SugarTimeDate = $TimeDate->fromUser($lead->date_entered);
原因是 Sugar 在调用您的代码时为 GUI 准备数据(包括根据用户偏好格式化日期)。这包括剥离秒数。执行上述 fromUser() 函数将 return 一个基于 当前用户配置的日期格式 的 SugarDateTime 对象 "date" 属性 ].这反过来又可以通过使用此标准格式在其他地方处理。
通过尝试,并在 Patrick McQueen 的帮助下,似乎有 2 种方法可以获取字段的生效日期值。
我找到的第一个解决方案是在所需字段上使用 select 执行 SugarQuery,然后 return 是完整的日期信息,因此 "2017-08-29 16:05:56"
。有点矫枉过正,但它完成了工作。
Patrick 提出的另一个解决方案是使用来自 bean 对象的 fetcher_row
数组,这也会 return 完整的日期信息。所以:
$lead->fetched_row['date_entered']
将 return 也会 "2017-08-29 16:05:56"
。
所以在任何情况下都需要一个有效日期("round-trip" 有一个 get 然后一个 set,或者一些同步要求),fetched_row[]
是解决方案,"direct"绝对要避免调用字段 $bean->field
。
我肯定遗漏了一些明显的东西,但我似乎无法找到一种方法从 SugarBean 字段的值中获取 TimeDate 对象。
假设我通过这种电话获得了特定的潜在客户:
$lead = BeanFactory::retrieveBean('Leads', "18bfc69e-8cd4-11e7-ad08-000c29b1a36e");
然后对此的任何调用:
$lead->date_entered
将return一个字符串值:"2017-08-29 16:05"
(注意没有秒)。
那么,例如,如果我尝试使用这样的值来创建 SugarTimeDate:
$TimeDate = new TimeDate();
$SugarTimeDate = $TimeDate->fromDb($lead->date_entered);
它将 return 为假,因为提供给 fromDb()
的值格式不正确(缺少秒数)。
在使用 Toad 查看 SQL table 时,我可以看到信息作为 DateTime 有效地存储在数据库中,值为 08/29/2017 16:05:56
。但是 SugarBean 对象将其作为格式不完整的文本提供。
那么如何从给定 SugarBean 中的字段(最好是对象)中获取有效的 SugarTimeDate、TimeDate 或 DateTime?
我进行了搜索,我发现的所有示例都是关于从 Now 创建一个新的日期对象以设置为 SugarBean 中的一个字段,但是 none 从现有的日期时间字段设置一个日期时间字段。
任何提示将不胜感激。
我不是 100% 清楚你想要完成的事情(见我的评论),但我猜你想要的是 fromUser() 函数,即
$SugarTimeDate = $TimeDate->fromUser($lead->date_entered);
原因是 Sugar 在调用您的代码时为 GUI 准备数据(包括根据用户偏好格式化日期)。这包括剥离秒数。执行上述 fromUser() 函数将 return 一个基于 当前用户配置的日期格式 的 SugarDateTime 对象 "date" 属性 ].这反过来又可以通过使用此标准格式在其他地方处理。
通过尝试,并在 Patrick McQueen 的帮助下,似乎有 2 种方法可以获取字段的生效日期值。
我找到的第一个解决方案是在所需字段上使用 select 执行 SugarQuery,然后 return 是完整的日期信息,因此 "2017-08-29 16:05:56"
。有点矫枉过正,但它完成了工作。
Patrick 提出的另一个解决方案是使用来自 bean 对象的 fetcher_row
数组,这也会 return 完整的日期信息。所以:
$lead->fetched_row['date_entered']
将 return 也会 "2017-08-29 16:05:56"
。
所以在任何情况下都需要一个有效日期("round-trip" 有一个 get 然后一个 set,或者一些同步要求),fetched_row[]
是解决方案,"direct"绝对要避免调用字段 $bean->field
。