1. 关于“X+”

2. 平台组成

3. 应用设计规范

4. 应用界面示例

5. 平台部署准备工作

6. 服务器软件安装

7. Web Service安装

8. X+用户登录与鉴权

9. X+应用的部署(快速篇)

10. BizXML自动化工具

11. 开发者模式

12. X+Logic表格逻辑规则引擎

13. X+之NOSQL支持

14. X+与IOT

15. X+应用的部署(专业篇)

1. 关于“X+”

“X+”是一套集开发环境与运行环境于一体的轻量级5S(Simply)软件平台,旨在将各种应用的个性化定制、部署及使用等简单化,适用于互联网+、大数据、云计算、BI、O2O、CRM、OA、ERP、知识库、企业信息化、呼叫中心、智慧城市、数字工厂、智能车间等应用软件的开发和个性化定制,同时它还是跨平台、安全、高效并支持应用专属定制的SOA软件应用运行平台,很好的解决了应用多样化、个性化、差异化问题,其应用界面、数据关系、业务逻辑均可按照用户的需求在线修改,定制的应用无需调整即可兼容电脑APP、手机APP、Web浏览器等方式访问。稳定好用、符合用户习惯、跨平台用户体验相同、易个性化定制。

平台以软件开发和应用设计相分离的核心思想,以简化软件应用的设计开发及个性化需求定制为目标,提供高效稳定的跨平台软件应用的快速个性化定制平台,依托该平台:软件应用设计无需专业的软件开发人员即可完成,并可随时随地修改调整如应用逻辑、显示界面等等,既大大降低软件应用的开发难度,还缩短应用上线周期,也大幅减少开发成本,其极大的灵活性极大的方便应用最大限度的贴合业务/客户需求。

平台以C/S架构为主(提供PC、手机客户端)、B/S架构为辅(提供兼容的Web Service),提供涵盖但不限于数据采集、分析处理、执行的多媒体信息通信功能,方便各类信息通过PC、手机、平板电脑及各类软硬件(如传感器)信息输入采集,传送至服务器通过算法仓库进行处理后进行显示或驱动相应执行元件输出或驱动硬件执行。

 

 

 

 

平台特点:

1. 业务运行平台,即可以承载大量不同行业不用类型的多用户差异化业务应用(不同于一个平台只能提供单一应用);

2. 定制灵活简单,超强个性化能力,无需软件开发人员参与便能快速按需定制应用,应用设计类似于WORD、PPT之类文档编辑保存发布,同时节约应用开放成本和开发周期达90%;

3. 跨平台一次定制,多平台设备兼容,即所定制的应用同时支持客户端、浏览器,无需单独为手机/平板电脑等设备单独定制APP;

4. 兼容性强,经测试可以在目前所有PC、智能终端上运行良好,无用户人群限制,最大限度保证用户便捷;(Windows2000以上任何版本,Android2.3以上(含64位),Web:IE8及以上及其他浏览器)

5. 该平台同时融合了多媒体通信,并且开放简单易用的类COM第三方软硬件接口,方便各类硬件如传感器、马达等以及软件融入系统;

6. 稳定高效,响应速度快,即使WEB访问其高执行效率及独特的响应机制给用户客户端的用户体验;

整个平台内核采用C++开发,保证了系统得稳定高效。

2. 平台组成

1、 平台标准规范:BizXML,定义“X+”的界面、数据关系、业务逻辑等,“X+”系统的服务端、客户端、Web服务引擎等遵循该规范并按照该规范处理显示页面执行业务逻辑等;

2、 C/S服务端:“X+”服务器软件,处理客户端的登录及各种请求,配合客户端处理应用逻辑、与数据库通信,并通过接口与第三方软硬件通信、调用AI等引擎及各种算法等;

3、 C/S客户端:Windows客户端、Android客户端等,处理用户登录,根据“X+”应用规定显示界面及处理相应的业务逻辑,通过接口与第三方软硬件通信等;

4、 B/S引擎:“X+”Web服务引擎cgi,提供web方式使用“X+”应用,解析应用的BizXML脚本,处理用户通过浏览器访问及各种请求,处理应用逻辑、与数据库通信,并通过接口与第三方软硬件通信、调用AI等引擎及各种算法等;

5、 类Com接口,开放给第三方软硬件、算法等,实现诸如传感器、马达、AI接口引擎、物联网设备等交互;

6、 表格逻辑xLogic:基于Table的业务逻辑,方便应用逻辑设计,简化逻辑的设计与执行,“X+”的服务端、客户端、Web服务引擎均支持;

7、 BizTool自动化工具,根据数据库表结构自动生成结构化SQL语句、关联页面控件生成应用代码BizXML,可实现0代码应用设计,并提供逻辑调试等;

8、 xLogic逻辑设计测试工具xLogicDesiner,提供可视化表格逻辑的编辑设计调试等。

3. 应用设计规范

“X+”的界面、数据关系、业务逻辑等遵循BizXML标准,请参考

4. 应用界面示例

1) 电脑客户端:

 

 

 

 

 

 

 

动图封面
 

 

 

动图封面
 

 

 

动图封面
 

 

 

动图封面
 

 

 

动图封面
 

 

2) 手机客户端

 

 

3) 电脑浏览器访问

 

 

 

 

4) 手机浏览器访问

 

 

5. 平台部署准备工作

软件下载

服务器软件:

3UCS Server(Window2000及以上,含Win10)安装程序里打包了X+服务器软件,3UCS命名其为智能业务平台,对应的执行程序为i3ubi.exe,配置文件为i3ubi.ini,傻瓜式安装即可,安装完成后需自行完成数据库等参数的配置。

下载地址:

软件应用资源包:

WebService的支持采用的是CGI方式,亦打包在3UCS Server安装程序里,需Apache之类HTTP Server配合提供服务。

下载地址:

客户端

PC客户端(Window2000及以上,含Win10),提供X+客户机及电话/视频等功能(vista、win7、win2008server语音功能需打补丁sp1<windows6.1-KB976932-***>)。

下载地址:

[3UCS XOne]

[3UCS NISU]

Android客户端(Android2.3及以上,含64位)

下载地址:

iOS客户端:应该在2020年发布请关注下载页面:

6. 服务器软件安装

(工作于C/S(客户机/服务器)模式)

3UCS命名其为智能业务平台,对应的执行程序为i3ubi.exe,配置文件为i3ubi.ini,傻瓜式安装即可,安装完成后需自行完成数据库等参数的配置。

管理界面可:,管理初始帐号:3ucs,无密码,主要是配置数据库部分,其他的不用管。

7. Web Service安装

提供X+对web浏览器的支持,采用CGI方式,需Apache等支持,经测试主流浏览器访问均正常(IE8及以上、firefox……

参见安装目录下help/install(of BizXML for web).htm

(Apache下载地址:)

8. X+用户登录与鉴权

用户登录时系统依照下述顺序逐一鉴权至成功,一旦成功即返回忽略后续鉴权方式:

1、i3ubi配置的[SQL]用户鉴权

2、i3ubi配置的[AltAuthSql]用户鉴权

3、xrulelayout.xml(layout目录,使用xLogic查看编辑修改)基于domain的用户鉴权及Anoymous页面

自带应用与账号登录【为安全起见,请及时修改这些账号的初始密码】

服务器安装完成后在3UCS Server安装目录下的Layout/demo文件夹会有默认应用“Example5.xml”,使用账号“6178”密码“6178”登录默认使用的就是该应用。

同时可能还默认安装了“layout\demo\btsqlite.xml”、“layout\demo\btmssql.xml”、 “layout\demo\btmysql.xml”三个应用,默认配置的账号分别是“6179”、“6176”、“6177”,密码均为“123456”,SQLite数据库应该默认安装成功,如果您需要测试MSSQL、MySQL(MySQL还需要安装ODBC驱动,下载地址),则需要您自行安装数据库并配置好数据库连接,这三个数据库版本都带有BizTool自动化工具,您可以使用他们来生成您想要的应用页面。

下列图例分别为6178、6179、6177、6176成功登录后显示的界面:

 

 

 

 

 

 

 

 

需要注意的是应用的根文件(如“btmysql.xml”)需要您配置数据库相关参数,例如:

<DbDetails>

<SubDriver>MySQL</SubDriver>

<Host>localhost</Host>

<database>mylayout</database>

<characterset>utf8</characterset>

<sqlMode>NO_BACKSLASH_ESCAPES</sqlMode>

<User>i3u</User>

<password>i3u</password>

<config>……</config>

<purview>……</purview>

</DbDetails>

9. X+应用的部署(快速篇)

添加应用:将新的应用解压至某个文件夹,例如将应用“test”的文件解压至安装目录下“layout/test”,应用的根文件为“test.xml”,那么我们可以在默认应用的用户管理里添加账号“6170”,对应的应用(窗体布局)为“layout/test/test.xml”,,使用6170账号登录便呈现的是“test”。

您也可以用户鉴权全部交由您自己的应用来完成,这时您需要注意:

1) 使用xLogic(xLogicDesigner)打开3UCS Server安装目录下“layout/xrulelayout.xml”编辑并编译规则保存为原文件,下图示将所有未添加的用户的应用设置为layout/ucin/mylayout.xml:

 

 

2) 如需鉴权需在前述<DbDetails>……<config>……</config></DbDetails>配置类似语句(需返回“password”: select u.user_password as Password,u.user_code,r.role_layout as layout,r.case_owner,u.bizdep,u.bizrole,u.active,r.role_purview as purview from userlogin as u left join bizrole as r on u.bizrole=r.role_id where user_name='%{UserName}'

3) 使用应用的用户不应该出现在前述“用户管理”里。

【 注:本处为快速简单部署,实际项目部署应该是单应用或单类型数据库,可按照专业部署指南来实施。】

10. BizXML自动化工具

自动根据数据库结构生成BizXML应用代码

参考:

11. 开发者模式

3UCS XOne客户端提供了xPlus的“开发者模式”,开发者可以在该模式启用后查看控件应用代码、控件属性、参变量及事件触发序列等,也可以在线修改属性来调整修改UI或业务逻辑逻辑等。

 

 

开启“开发者模式”需在服务端设置,i3ubi.ini有两个参数需配置“Secret”,“Developer”,也可以通过web方式修改(http://localhost:670)。

保密:secret,默认为true,即客户端不能查看应用代码,也不可以开启开发者模式修改调试应用

开发者:developer,是否开启或何种方式开启开发者模式,默认关闭,值为“1”开启代码查看,值为字符串(密码MD5值,可以通过XOne的“Get MD5”菜单生成)则输入授权码与该值匹配才可以开启开发者模式(可编辑),该可以是纯密码(授权码),亦可以是登录名+密码,也可以是登陆用户的sessionId(每个用户每次登录的sessionId都不一样,可在服务端log日志查到)。

参考:

12. X+Logic表格逻辑规则引擎

x+Logic介绍及 Designer可视化编辑/设计工具

参考:

13. X+之NOSQL支持

3UCS NoSQL

NoSQL是基于google的LevelDB二次开发的时序数据库,并提供SQL语法支持。

ID为记录插入的时间ms(毫秒)值,score为ID的分钟值即Value(ID)/6000。

iot数据库拥有key“topic”,immsg数据库拥有key“recvfrom”“sendto”

查询语句类似于MySQL语句,默认倒序查询,select [columns] from [table] where [where] order by order limit [limitstr] key [keystart] score [score]

limit的offset可略去即limit 0,100;limit 100;limit ,100都合法,都是取前100条记录

score可以指定score_start,score_end;例如score 0,100000;score 10000;score ,1000000均合法,另外可以使用时间值来设置score,例如score 1 hour ago 表示查询一小时前的;score ,1 hour ago表示查询现在至一小时前的记录;score 2021-05-01表示查询2021-05-01之前的记录

示例:

select * from iot;

select * from iot where topic='xxx';

select * from iot limit 0,100 score ,4 week ago

select %{dev_data[columns]} from iot where topic='%{dev_data[dev_type]}/%{dev_data[dev_id]}/%{dev_data[data_id]}/%{dev_data[data_param]}' limit 0,100 score ,4 week ago

select * from iot limit 100 score now();

select * from iot where topic='%{mqtt_topic}' limit 0,100 score now(),2021-05-05 20:10

select * from iot where topic='devices/desoutter01/sys/61/detail' and key='%{YU5A4A554012100410003818643410}'

14. X+与IOT

3UCS IOT

IOT 支持包括但不局限于MQTT(包括MQTTSN)、Modbus、Open Protocol、PLCS12、OPC、OPC UA、Serial Port、MTConnect、SNMP、PROFINET、NC-LINK等协议,并提供接口方便动态增加其他未知协议。

MQTT端口默认配置为TCP/UDP:998(MQTT/MQTTSN);web socket:996;

[MQTT](3UCS xPlus配置文件i3ubi.ini之MQTT节)

# MQTT section (tcp ports)

mqtt_iface = eth0

mqtt_port = 998

mqtt_tls_port = 997

mqtt_ws_port = 996

mqtt_ws_tls_port = 995

# MQTT-SN section (udp port)

mqttsn_iface = eth0

mqttsn_port = 996

其它协议如Modbus、Open Protocol、PLCS12等都在daq.conf文件配置,采用的xml格式。示例如下:

<daq clientid="test">

<device id="desoutter01">

<acqer proto="openprotocol" devaddr="1" ip="192.168.1.100" port="5056" timeout="500">

<item id="1" name="keepalive" cycle="10" funcode="9999"/>

<item id="2" name="psetdo" cycle="5" acquire="false" funcode="18"/>

<item id="3" name="psetbatchsize" cycle="5" acquire="false" funcode="19"/>

<item id="4" name="distool" cycle="5" acquire="false" funcode="42"/>

<item id="5" name="entool" cycle="5" acquire="false" funcode="43"/>

<item id="6" name="vin" cycle="5" acquire="false" funcode="50"/>

</acqer>

</device>

<device id="posco01">

<acqer proto="modbus" devaddr="1" ip="192.168.1.12" port="502">

<item id="1" name="rs" cycle="1" funcode="2" startaddr="1" count="1"/>

<item id="2" name="tightenok" cycle="5" funcode="5" startaddr="1" count="1"/>

<item id="3" name="reset" cycle="1" funcode="5" startaddr="7" count="1"/>

<item id="4" name="jobs0" cycle="1" funcode="5" startaddr="5" count="1"/>

<item id="5" name="jobs1" cycle="1" funcode="5" startaddr="6" count="1"/>

<item id="6" name="jobs2" cycle="1" funcode="5" startaddr="4" count="1"/>

<item id="7" name="start" cycle="1" funcode="5" startaddr="3" count="1" delay="50"/>

</acqer>

</device>

<device id="disp01">

<acqer proto="modbus" devaddr="1" ip="192.168.0.250" port="502">

<item id="1" name="med_pos1" cycle="5" funcode="6" startaddr="0" count="1"/>

<item id="2" name="med_pos2" cycle="5" funcode="6" startaddr="2" count="1"/>

<item id="3" name="med_pos3" cycle="5" funcode="6" startaddr="4" count="1"/>

<item id="4" name="med_pos4" cycle="5" funcode="6" startaddr="6" count="1"/>

<item id="5" name="med_pos5" cycle="5" funcode="6" startaddr="8" count="1"/>

<item id="6" name="med_cnts" cycle="5" funcode="6" startaddr="10" count="1"/>

<item id="7" name="ind_shangdai" cycle="5" funcode="6" startaddr="11" count="1"/>

<item id="8" name="ind_fengdai" cycle="5" funcode="6" startaddr="12" count="1"/>

<item id="9" name="ind_startstop" cycle="5" funcode="6" startaddr="13" count="1"/>

<item id="10" name="getweight" cycle="5" funcode="3" startaddr="30" count="1" />

<item id="11" name="return_finish" cycle="5" funcode="1" startaddr="31" count="1"/>

</acqer>

</device>

<device id="cab01">

<acqer proto="modbus" devaddr="2" ip="192.168.0.7" port="502" subproto="rtu">

<item id="1" name="light1" cycle="5" funcode="6" startaddr="1" count="1"/>

<item id="2" name="light2" cycle="5" funcode="6" startaddr="2" count="1"/>

<item id="3" name="light3" cycle="5" funcode="6" startaddr="3" count="1"/>

<item id="4" name="light4" cycle="5" funcode="6" startaddr="4" count="1"/>

<item id="5" name="light5" cycle="5" funcode="6" startaddr="5" count="1"/>

<item id="6" name="light6" cycle="5" funcode="6" startaddr="6" count="1"/>

<item id="7" name="light7" cycle="5" funcode="6" startaddr="7" count="1"/>

<item id="8" name="light8" cycle="5" funcode="6" startaddr="8" count="1"/>

<item id="9" name="light9" cycle="5" funcode="6" startaddr="9" count="1"/>

<item id="10" name="light10" cycle="5" funcode="6" startaddr="10" count="1"/>

<item id="11" name="light11" cycle="5" funcode="6" startaddr="11" count="1"/>

<item id="12" name="light12" cycle="5" funcode="6" startaddr="12" count="1"/>

<item id="13" name="light13" cycle="5" funcode="6" startaddr="13" count="1"/>

<item id="14" name="light14" cycle="5" funcode="6" startaddr="14" count="1"/>

<item id="15" name="light15" cycle="5" funcode="6" startaddr="15" count="1"/>

<item id="16" name="light16" cycle="5" funcode="6" startaddr="16" count="1"/>

<item id="17" name="light17" cycle="5" funcode="6" startaddr="17" count="1"/>

<item id="18" name="light18" cycle="5" funcode="6" startaddr="18" count="1"/>

<item id="19" name="light19" cycle="5" funcode="6" startaddr="19" count="1"/>

<item id="20" name="light20" cycle="5" funcode="6" startaddr="20" count="1"/>

<item id="21" name="light21" cycle="5" funcode="6" startaddr="21" count="1"/>

<item id="22" name="light22" cycle="5" funcode="6" startaddr="22" count="1"/>

<item id="23" name="light3" cycle="5" funcode="6" startaddr="23" count="1"/>

<item id="24" name="light24" cycle="5" funcode="6" startaddr="24" count="1"/>

<item id="25" name="light25" cycle="5" funcode="6" startaddr="25" count="1"/>

<item id="26" name="light26" cycle="5" funcode="6" startaddr="26" count="1"/>

<item id="101" name="lights" cycle="60" funcode="3" startaddr="1" count="26" valtype="string"/>

</acqer>

</device>

<device id="PLC01">

<acqer proto="plcs12" devaddr="1" ip="192.168.1.238" port="8200">

<item id="1" name="cpux238" valtype="string" cycle="30" funcode="0" cmd="45"/>

<item id="2" name="formcd" valtype="string" cycle="3600" funcode="0" cmd="35"/>

<item id="3" name="prodmg" valtype="string" cycle="3600" funcode="0" cmd="37"/>

<item id="4" name="prodset" valtype="string" cycle="3600" funcode="0" cmd="47"/>

</acqer>

</device>

</daq>

参数说明 device id为device识别id,也在MQTT映射中topic标识设备,

acqer对应于设备不同协议的数据采集与更新,其protocol为使用的协议,如modbus、open protocol等,devaddr不同协议或厂家不一样,比如modbus中其表示slaveid,可有些厂家设备用来区分目标地址,实现产品内部不同的功能;subproto用来增强协议功能,比如modbus在使用TCP转RTU是仍然使用tcp协议,此时需置subproto="rtu"来告诉系统使用的是modbus rtu而不是modbus tcp; cyclebase 用来调整cycle周期基数,默认值为1000ms,如需求中希望cycle小于1秒,可以将其设置为100ms或其他(eg:cyclebase="100" );timeout为socket receiv timeout,默认值为100ms,可根据需要设置(eg:timeout="500", 设为500ms)

item为给采集项或控制项,不同协议参数意义不相同,delay主要用于modbus的IO输入输出场景,某些IO需要delay才能正常响应,(eg:delay="50")

这些协议与MQTT互通,其topic为devices/{device id}/{item name}/{param}/{extparam},支持MQTT的方法如Subscribe/Publish。

例如:topic “devices/desoutter01/psetdo”,“devices/desoutter01/sys/7408”,“subtopic:devices/desoutter01/sys/1”,“devices/desoutter01/sys/14”,“devices/desoutter01/sys/60”“devices/desoutter01/sys/7402”,“devices/desoutter01/sys/7408”,“devices/desoutter01/sys/15”,”devices/desoutter01/sys/61”,“devices/desoutter01/sys/7410/detail”,“devices/desoutter01/acqer_//csvpath”,

“devices/posco01/rs”,“devices/posco01/sys/conn”等均有效

关于更改acqer配置,可以使用publish,topic类似于“devices/desoutter01/acqer_/{proto}/csvpath”,即第三个参数为“acqer_”指明更新的参数为acqer的配置参数,{proto}为需要配置acqer对应的协议,为空时表示该device的首个acqer,当设备配有多个acqer协议时更改非第一个acqer时应指明协议,例如“devices/desoutter01/acqer_/openprotocol/csvpath”,“devices/posco01/acqer_/modbus/ip”等。

15. X+应用的部署(专业篇)

X+的配置分系统级与应用级,前述(快速篇)是应用级的部署,主要是开发测试阶段及小型应用部署。

系统级的配置就会涉及到X+平台的配置了,主要的配置文件是i3ubi.ini(3UCS Server安装目录)

授权查询语句(authQuery,用户登录及相关权限控制,传入客户机参数“UserName”、“ServerName”,至少返回“password”、“layout”值,若密码鉴权失败或未返回“layout”值,将调用“匿名访问页面查询语句”查询layout参数,若仍无该参数将使用安装目录中“help\i3u.xml” 做为用户应用布局,返回的参数值将存续于用户整个登录期,除非被覆盖或更新,当用户脚本(BizXML)中存在“config”配置时,其各参数仍然有效,但与BizXML的config同名参数将被覆盖为新值;登录密码验证在authQuery中有效,需返回“password”参数值,而对用户脚本一旦BizXML出现layout参数将优先取用最后出现的“layout”值。)(此处的数据库配置、用户名、密码应与软交换的用户鉴权配置一直,否则PC版客户端NISU可能无法正常登陆)

匿名访问页面查询语句(anoymousQuery,传入客户机参数“ServerName”,返回“layout”值,即应用布局。)

用户注册语句(registerQuery,传入“UserName”、“passwd”,“ServerName”参数,返回行数大于0表示用户名存在。)

用户名是否存在语句(registerCheckUser,传入“UserName”、“ServerName”参数)

权限查询语句(purviewQuery模块访问权限控制,需返回module与purview值,当用户脚本(BizXML)中存在purview配置时他将在对应的用户隐藏(即对当前用户无效)。Module的purview值为真时对应模块将开放给该用户访问。)

默认存贮语句(文件)

即时消息存储(StoreIMQuery) 即时消息的存储与离线转发

未读消息查询(unreadImMsg)

未读消息更新(unreadImUpdate)

authQuery=select u.user_password as Password,'base' as contactdb,u.user_code,1 as id_corp,r.role_layout as layout,r.case_owner,u.bizdep,u.bizrole,u.active,r.role_purview as purview from userlogin as u left join bizrole as r on u.bizrole=r.role_id where user_name='%{UserName}'

purviewquery=select m.module,m.purview from modules as m left join userlogin as u on u.bizrole=m.role_id where user_name='%{UserName}'

StoreIMQuery=insert into chatmsg values(NULL,'%{sendto}','%{recvfrom}','%{msg}',UNIX_TIMESTAMP(),'%{isread}','%{id_corp}')

unreadImMsg=select idmsg,sendto,msg,tRecved,recvfrom from chatmsg where sendto='%{sendto}' and IsRead=0

unreadImUpdate=update chatmsg set isread=1 where idmsg=%{idmsg}

registerQuery=insert userlogin (user_name,user_password) values('%{UserName}','%{passwd}')

registerCheckUser=select * from userlogin where user_name='%{UserName}'

替换应用:将新的应用的数据库及数据安装完成,配置“i3ubi.ini” 或、“3ugk.ini” 或http://localhost:666/,确保两者账号、密码一致(若使用到3UCS呼叫叫心、会议等,为了整个系统数据一致性,也应配置网关、会议、多媒体交换云、排队机的相关数据库配置),将新应用“test1”的文件解压至安装目录下“layout/test1”,应用的根文件为“test1.xml”,在数据库用户表里添加账号例如“6178”对应的应用为“layout/test1/test1.xml”,重启3UCS服务后“6178”登录后呈现的应用便是“test1.xml”。

需特别说明的是若使用了3UCS其他组件,如呼叫中心、会议什么的,而“X+”应用又跟这些数据相关,请直接以替换应用的方式来保证数据的一致性。

在这儿需特别提醒的是“授权查询语句(authQuery)”会返回Layout(例如“a.xml”)作为用户的应用(窗体布局),可当返回的布局里数据库配置里的“config”配置里也返回了Layout(例如“b.xml”),那么该用户的应用将变更为“b.xml”,相关细节参考BizXML规范“”。

工作路径的设置,x+的工作路径有两个,一个是rootpath(文件类存放目录),一个是bizxmlpath(layout[xml代码]存放目录),默认均为安装目录(eg:“****/3ucs/server/”),当设置了bizxmlpath而为设置rootpath时rootpath跟随bizxmlpath,当二者均有设置而rootpath路径为指定盘符其路径将被认为是bizxmlpath子路经(即相对于bizxmlpath)

bizxmlPath should config to root file of bizxml script files, eg: your bizxml files `index.xml` is put in `D:/Program Files/3UCS/Server/layout/ucin`, configure it like this `bizxmlPath=D:/Program Files/3UCS/Server`, and will refer your bizxml root file like this `layout/ucin/index.xml`。

具体配置细节可参考“3UCS 安装部署说明”(Server\help\3ucs_User_Manual.htm)

posted on 2022-08-10 10:15  BizFree  阅读(563)  评论(0)    收藏  举报