CRM 在WebClient UI页面上按F2,就能看到页面的技术信息, 可以找到当前页面是哪一个BSP component实现的: C4C 在浏览器url里添加debugMode=true,然后按住Ctrl加上鼠标右键,即可弹出同上图CRM WebClient UI作用类似的技术明细页面: Hybris 同样的需求,比如下图这个产品明细界面,我想知道是哪个JSP文件实现的? 没有类似CRM和C4C这样的快捷键来实现这个需求. 登录Hybris Content Management System…
CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Work center之后,在后台ABAP端计算出navigation target. Hybris 这个Catalog的下拉menu里每个item都对应一个url,在html里用 tag实现.这个url在客户端可见. https://localhost:9002/yacceleratorstorefro…
CRM 使用事务码SM36查看CRM系统的后台作业: 举一些例子: ABAP_TEXT_INDEX这个job执行的report是ABAP_DOCU_CREATE_TEXT_INDEX: 负责填充buffer表ABAPDOCU_BUFF, 以便ABAP帮助文档的快速读取. RDDIMPDP 从其他ABAP系统的传输请求进入当前系统后执行导入的逻辑就是在这个job里完成的. C4C 和CRM系统一样后台都是基于Netweaver,只是客户无法和CRM一样使用事务码SM36进行后台作业的管理.但是类似…
CRM WebClient和Hybris backoffice的UI开发都不需要开发人员手写原生的html代码. CRM WebClient UI 在CRM WebUI workbench里,开发人员需要写下图这些SAP封装的tag: 这些Tag能在事物码SE80里找到: Hybris backoffice UI 比如我通过backoffice左边倒L形的工作中心列表查看优惠券列表,这个列表实际上是一棵树,根节点是Marketing. 上图界面是通过在XML文件里定义Hybris封装的tag来实…
在asset里的页面都可以这样获得 file:///android_asset/index.html…
asp.net mvc4设置area里面使用相同的 Controller 名称并设置area里的页面为起始页 1.使用重名controller 在asp.net mvc2以后的版本里面,有了area(区域的概念),这为我们开发中提供了不少方便的地方,但是很不凑巧,若是存在多个重名的controller就会发生错误,因此我们可以根据router的规则来解决这个问题. 错误提示: 我们可以根据错误提示来解决这个问题,在MapRoute方法添加namespaces参数,代码如下:   public s…
$(window).height() 和 $(document).height()的区别 $(window).height()代表了当前可见区域的大小,$(document).height()则代表了整个文档的高度,可视具体情况使用. 当浏览器窗口大小改变时(如最大化或拉大窗口后) ,$(window).height() 随之改变,但是 $(document).height()是不变的. 原生js里获取页面高度和文档高度 document.body.clientHeight相当于$(window…
CRM的例子 Step by Step to debug IC inbox workflow WS14000164 C4C Custom recipient determination in workflow rule done on Account BO Automatically send an Email notification to line manager via Workflow in Account application Hybris Hybris workflow的框架实现代…
CRM Controller只需实现IF_BSP_WD_HISTORY_STATE_DESCR~GET_STATE_DESCRIPTION方法: 上图在ABAP调试器里观察到的这个字符即出现在最终页面上. Hybris Product明细页面的pageTitle字段绑定到Model的{pageTitle}字段上: 调试器里观察到的pageTitle的值: 最后的效果: 要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:…
CRM 比如我们想看Quantity这个字段到底是绑在哪个模型上,选中该字段按F2: 就能知道是绑在Context node BTADMINI的QUANTITY字段上. C4C 同理,使用debugMode=true进入调试模式,按住Ctrl对该字段点左键. 这就是该quantity字段的绑定路径. 点击"Get CTs": 说明这个字段是一个extension field,通过C4C的change transaction添加到UI上. 要获取更多Jerry的原创技术文章,请关注公众号…
CRM(WebClient UI) CRM(SAP GUI,事务码PPOMA_CRM) C4C 以列表方式显示: 以图形方式显示: UI模型: /SAP_BYD_APPLICATION_UI/mom/org/COD_OrgUnit_OWL.OWL.uicomponent 明细页面:/SAP_BYD_APPLICATION_UI/mom/org/COD_OrgUnit_TI BO name: OrganisationalUnit 通过递归执行association ChildOrganisatio…
SAP CRM内容管理 SAP CRM使用Attachments这个UI给用户提供内容管理的功能.通过新建按钮可以上传本地文档到CRM系统: 该内容管理支持简单的版本管理功能,用户可点击Check Out将一个文档导出到本地,编辑结束之后通过Check In按钮将修改版本导入至CRM. 每次Check Out / Check In会生成一个新的版本. 从技术上来说,每一个文件上传到CRM后,会自动生成一个Logical Info Object(LOIO)和Physical Info Object…
Document flow API in CRM 以一个具体的例子来说明.在Appointment的Overview page上能看见一个名叫Reference的区域,这里可以维护一些其他的业务文档的ID,这样可以将该业务文档同当前正在编辑的Appointment关联起来. 我写了一个简单的报表来演示如何用ABAP代码给这个Reference区域的字段赋值,背后用到的实际上就是CRM Document flow相关的API. 报表的源代码在我的github上: 代码的核心就是使用CRM One…
SAP CRM 点了Edit List之后,可以直接修改产品主数据的Price信息: C4C 在C4C的product administration工作中心里: 点击Edit按钮进入编辑模式,Price List区域里的内容也不能编辑: 那么上图红色高亮的数据从哪里来? 首先从Chrome开发者工具里找到C4C产品主数据明细页面的UI模型名称: /sap/ap/ui/json?app.component=/BYD_COD/SalesOnDemand/Product/UI/COD_Material…
SAP Cloud for Customer(C4C)和SAP其他传统产品进行数据同步的方式,如下图所示,可以使用SAP Netweaver Process Integration或者SAP HANA Cloud Integration(HCI). 在C4C系统,工作中心Administrator, 视图General Settings, 在Integration里维护数据同步远端信息. 下图意思是我期望将当前C4C系统的Opportunity数据同步到远端CRM系统,ID为Q2C. 使用PI进…
CRM 从ERP导入到CRM系统的Product Hierarchy,在CRM系统切换成编辑模式时,会收到一条提示信息: Hierarchy XXX may only be changed in the original system XXX C4C(Cloud for Customer) 在这个系统里,New hierarchy按钮处于禁用状态. 首先通过Chrome开发者工具找到Product Categories这个视图所在的工作中心视图: /SAP_BYD_APPLICATION_UI/…
Twitter的内容导入SAP CRM Interaction Center呼叫中心 具体步骤查看我的博客Twitter(also Facebook) is official integrated into CRM 7.0 EHP3 在Twitter网站上创建一条tweet: 之后按照我博客里的设置即可将其导入CRM呼叫中心: C4C 新建一个social media channel: 从下拉菜单里选择Channel(渠道)的类型为"Twitter",维护Twitter应用的consu…
SAP CRM 随便修改一个字段,比如给Search Term维护值"webpack": Change History assignment block里显示出了这条修改记录: 根据时间在change history的抬头表CDHDR里找到这条对应的记录: 具体修改明细在表CDPOS里: SAP C4C 如果把客户的某个字段比如地址里的house number从5改成510: 在Feed标签页里能看到修改日志: 要获取更多Jerry的原创文章,请关注公众号"汪子熙"…
UI5 例如我在UI5的界面上画一个按钮,点击之后弹出一个Alert dialog. 在XML view里只定义了controller的名称和事件处理函数的名称.那么按钮被点击之后,controller的onShowHello被触发.但是,这个controller的实例是什么时候被创建, 并且关联到这个申明它的XML view里呢? 在XMLView.js里,我定义的XML view的源代码被加载之后,XMLView会调用XMLTemplateProcessor, 解析XML view的内容,根…
ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟,Hybris Administration console会发起一个到Java后台的AJAX查询请求: 这个5秒的时间间隔定义在project.properties配置文件里, 然后使用JavaScript的setInterval建立定期轮询: Java后台的实现,即读取当前内存消耗信息实现在package de.hybris.platform.hac里: 要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"…
I create an enhancement in this function module to print out current session id: As long as I do not close browser, no matter what operation I perform in WebUI, the session id remains the same, proving that all my operations are done in the same sess…
发现问题: 修改系统时常常需要预置APK,这就要修改PRODUCT_PACKAGES这个变量,那么如何查看这个数组的值呢?我们可能直接在mk文件中去打印它,后来发现打印它只会显示继承关系(即继承自了哪些mk文件),并不会打印当前已将添加了哪些包 $(warning $(PRODUCT_PACKAGES)) 所以上面这种方式行不通. 解决方案: 发现build/core/product_config.mk中定义了一个make的构建目标dump-products,能够打印构建当前目标所定义的变量:…
我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们调试js,发布js文件也是比较繁琐的事情,最好的办法是全部调好,再发布上去,本文介绍用firefox + firebug + frame可以很方便地调试CRM js,全部调好后,再上传js,明显可以加快开发的速度. 1. 智能提示 CRM相关的方法属性的vs 里加上XrmPageTemplate.j…
https://community.dynamics.com/crm/f/117/t/210393 https://community.dynamics.com/crm/f/117/t/118414 参考了一些国外的论坛里说的, 如果直接跳转到xxx.crm.com/m/default.aspx 直接输入为xxx.crm.com/main.aspx…
在有了基础的Position类之后,我们需要考虑我们在寻找完页面元素之后,需要做什么.这个“做”什么,可以理解为我们在页面上需要对应的一系列动作.比如:点击,输入,切换窗口,寻找元素,判断元素是否存在,智能等待,获取弹窗文字等等.在实际的测试中,我们需要用这一系列的动作来完成测试操作. 在这里,我们使用接口+接口实现类的方式来完成这里的编写.这是因为我们可以随时增加接口的内容,然后在实现类中通过代码去实现.通过Java的继承特性,我们需要把写在接口里的方法一个个具体实现,从而保证不会漏掉. pa…
一.在页面里用 open 打开的子页面: 1.子页面调用父页面的方法,包括子页面给父页面传值: window.opener.methodName(); window.opener.methodName(param1,param2); 2.父页面关闭子页面:在父页面 openWin=window.open(""); function bClick(){ openWin.close(); } 二.在Iframe 的子页面里 1.子页面给父页面的Div赋值 parent.window.doc…
//推断iframe是否载入完毕,RMid为iframe的ID document.getElementById("RMid").onload = function () { alert("载入完毕"); } //在父框架操作iframe页面里的AddReceipt2方法 window.frames["RMid"].AddReceipt2();…
# MQClientAPIImpl::getTopicRouteInfoFromNameServer () at MQClientAPIImpl.cpp: # # # # # # # # # , argv= (gdb) p *request $ = {, m_code = , m_language = , m_opaque = , m_flag = , m_remark = , m_pHead = , m_pBody = 0x0, m_releaseBody = false, static s_…
对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是,让测试人员解放生产力,提高效率,把精力关注与最为重要的核心业务逻辑与测试设计上,是每个测试团队所必需要关注的.因此,在适当的范围内开展自动化测试,是可以提高整个测试团队的生产率的. 对于Selenium,这个东西是一个浏览器应用程序测试工具.之所以选择它做WebUI的自动化测试主要是因为它有以下两大…
在编写完Log类和监听类之后,终于要回到正轨上来了.我们继续开始写UIExcutor的实现类. PS:如果你想让你的报告更加美观一些.推荐使用reportNG这个jar包. 在项目中导入reportng-1.1.5.jar,这个jar包网上可以找到.可是具体在哪里下载的我也忘了.....这里先提一下,到后面我们再来详细的说明. 还记得我们之前写过的UIExcutor的接口吗?我们在这里需要一个一个的实现接口中的方法.(一个都不能少!) package webui.xUtils; import j…