【知识分享】移动BOS-日期字段长日期与短日期转换
金蝶云社区-用户已注销
用户已注销
1人赞赏了该文章 2,513次浏览 未经作者许可,禁止转载编辑于2017年06月22日 11:14:55

一、前言
1. 目前移动BOS只有日期字段,尚未提供长日期字段。
2. 原本日期字段与PC端是保持一致的(短日期格式),但是后来可能由于用户需求变更,在H5端(云之家)的日期字段变成了长日期格式。
3. 所以最近接触到比较多的提问,关于移动报表配置了日期关键字后查询不到数据问题,就是因为长日期导致,目前提供的解决方案是在脚本中处理将长日期重新修改为短日期。
如下图所示,开始时间保持日期字段默认值(长日期),结束时间使用脚本处理成短日期:


二、实现
1. 通过Python脚本实现(Python的好处就在方便快捷,不需要重新IIS)
[code]import clr
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.Mobile")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.Contracts")
from Kingdee.BOS import *
from Kingdee.BOS.JSON import *
from Kingdee.BOS.Mobile import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Const import *
from Kingdee.BOS.Mobile.Metadata import *
from Kingdee.BOS.Mobile.PlugIn.ControlModel import *
from System import *
from System.Collections.Generic import *
from System.Linq import *

def BeforeUpdateValue(e):
if (e.Key == "FStart" or e.Key == "FEnd") and e.Value != "":
val = e.Value.ToString();
nVal = DateTime.Parse(val).Date;
e.Value = nVal;[/code]
2. 通过.Net脚本实现
[code]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Mobile.PlugIn;
using Kingdee.BOS.Util;

namespace Kevin.Demo.Mobile
{
public class Kevin_BD_A : AbstractMobilePlugin
{
public override void BeforeUpdateValue(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BeforeUpdateValueEventArgs e)
{
base.BeforeUpdateValue(e);

if ((e.Key.EqualsIgnoreCase("FStart") || e.Key.EqualsIgnoreCase("FEnd")) &&
!e.Value.IsNullOrEmptyOrWhiteSpace())
{
var val = e.Value.ToString();
var nVal = DateTime.Parse(val).Date;
e.Value = nVal;
}
}
}
}
[/code]
三、相关链接
1.【分享】移动BOS汇总贴
2.【分享】K3 Cloud移动产品相关文档下载