[AX]AX2012 R2 EP员工自助服务中的产品不能显示图片的问题
在员工自助服务EP站点中员工可以通过Order products自助提交采购申请,在正确设置员工采购目录后会罗列出允许员工购买的产品,每个产品都可带有图片,我们可以通过Product image来为产品添加图片(可以设置在Released product或者其Product/product master上),比如我们为一个产品添加一个Embedded类型的图片,程序提示我们选择一个图片文件,图片文件的数据保存在DocuValue表中(File字段),创建相应的DocuRef记录(用户看到的Attachment记录),同时创建相应的EcoResProductImage记录,创建204*204/48*48两个大小的缩略图(调用EcoResProductImageThumbnail.generateThumbnail),分别保存到EcoResProductImage的MediumSize和ThumbnailSize字段,这就是我们在客户端程序中看到的产品缩略图。
需要注意的是并非所有格式的图片都可以,添加图片时会通过Docu::validateExtension()判断文件后缀名是否有效,有效的文件格式在Organization administration>Setup>Document management>Document management parameters>File types维护,比如我们可以在这里添加PNG格式的图片文件格式。如果这里没有维护任何的格式,会调用DocuFileTypes.loadDefaults()装载默认的常用的文件格式,PNG图片不在其中。
另外一个要注意的是上图中我们选择附件类型为Embedded,它会将文件的内容保存到数据库,具体的设置在Organization administration>Setup>Document management>Document types。
在我的测试系统中打开产品列表时看不到产品的图片,都是显示一个红叉,看到网上也有网友反映这个问题,有建议的答案是需要执行System administration>Setup>Enterprise Portal>Publish images来发布图片到Sharepoint,我们来看看这个动作具体做了什么,大体的调用过程是:
1.[X++]SysEPDeploymentProxy.deployWebComponent()
2.[.NET,客户端程序目录下的Microsoft.Dynamics.Framework.Deployment.Portal.dll程序集]Microsoft.Dynamics.Framework.Deployment.Services.EPDeploymentService.DeployWebComponent()
3.[IIS]Web服务http://server/_layouts/EPDeploymentService/EPDeploymentService.asmx
4.[.NET,AOS执行文件目录下的Microsoft.Dynamics.Framework.Deployment.Portal.dll,比客户端目录下的同名程序集文件大小更大些]
Microsoft.Dynamics.Framework.Deployment.Portal.EPDepolymentService.DeployWebComponent
5.[.NET,程序集同上] EPDepolyment.DeployWebComponent()
6.[.NET,Microsoft.Dynamics.Framework.BusinessConnector.Proxy.dll] SysEPDeployment.DeployWebComponent()
7.[X++]SysEPDeployment.deployWebComponent()
可以看到的是执行过程从X++的SysEPDeploymentProxy.deployWebComponent()开始,途经.NET的WEB服务调用,最终又回到了X++的SysEPDeployment.deployWebComponent(),你可能会问,为什么不直接在X++中调用SysEPDeployment.deployWebComponent来发布,主要因为这个方法需要在运行EP Sharepoint服务的服务器上运行(通过注册表检查Sharepoint安装),另外还有运行用户的问题(通过WEB服务调用会使用Bussiness Proxy的用户账号运行)。作为测试,我们还是可以在EP服务器上运行下面的代码来发布图片:
static void TestPublishImages(Args _args)
{
#AOT
SysEPDeployment epDeployment = new SysEPDeployment();
str siteUrl; //Deploy Images for company: %1?
try
{
siteUrl = sysEPWebPageDefinition::getDevelopmentSiteUrl(); epDeployment.deployWebComponent(#ResourcesPath, siteUrl, siteUrl ); }
catch
{ throw error("@SYS329436");
} epDeployment.dispose();
}
SysEPDeployment.deployWebComponent()的作用是把包括Sharepoint网页定义、控件、Web module等WEB资源发布到sharepoint站点,上面我们传入的第一个参数是“\Resources”即AOT的Resources节点,程序转到SysEPDeployment.deployImagesOnServer()执行,它的第一个作用是读取AOT Resources下的图片资源通过deployImageOnServer()发布(实际上导出)图片到目录C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ep\images目录下,另外一个作用就是调用SysEPDeployment::deployCompanyImages()发布公司相关的图片,下面是相关的代码:
public static boolean deployCompanyImages(str layoutsEPPath)
{
#Web
container allImages;
BinData binData;
Bitmap bitmap;
str path = layoutsEPPath + #imagesDirPath;
int i, length; info (path);
allImages = SysEPDeployment::loopOverImagesInPartition();
length = conLen(allImages); for (i = ; i <= length; i +=)
{
bitmap = conPeek(allImages, i);
if (bitmap)
{
binData = new BinData();
binData.setData(bitmap);
binData.saveFile(path+'\\'+ conPeek(allImages, i+));
}
} // This will publish the Products original images from DMS tables.
CatCatalogProductImagesPublish::publishDocuValueImages(layoutsEPPath); return true;
}
deployCompanyImages()第一个重要的方法是loopOverImagesInPartition(),它轮询所有的Partition,通过runas()(如果调用请求来自于Web服务,需要跨越Partition边界获取数据,所以使用runas在所有Partition循环调用)调用SysEPDeployment.getImagesFromPartition(),后者的主要作用是查找CompanyImage、ECPPresentation、EcoResProductImage三张表中所有EDT类型为Bitmap的字段(比如前面看到的EcoResProductImage的MediumSize和ThumbnailSize字段),将字段中保存的图片内容提取出来,连同文件名保存到container,交由deployCompanyImages将图片以文件方式保存到目录C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ep\images下,文件命名方式为:'image_'+表.TableId+'_'+字段ID+'_'+记录RecId+'.'+图片文件后缀名。
deployCompanyImages()中另一个重要的方式调用CatCatalogProductImagesPublish::publishDocuValueImages(),它关联查询EcoResProductImage和DocuRef表,将图片数据从关联DocuValue中取出,同样保存到目录C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ep\images下,图片文件的命名方式和上面相同,只是这次表TableId固定为DocuRef的ID,字段ID固定为0。
通过上面的分析我们看到Publish images功能确实将系统中能看到的图片全部发布到目录C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ep\images下,这个目录经过IIS映射的URL为http://<server>/_layouts/ep/images/,我们在EP中看到的图片也都是源于这个网络路径。在完成图片发布后,确确实实看到目录下有很多更改日期新近的图片文件,但是在IE中查看仍然看不到相关的产品图片,显示图片不可用的红叉。测试发现使用浏览器Chrome和Firefox访问EP站点时都能正常的看到这些图片,怀疑是IE自身的问题,但在多台电脑上不同版本IE都是一样。最后在使用图片浏览软件查看相关图片格式时发现这些图片虽然是.jpg的后缀名,但实际上是png的格式,我的数据来自于微软网址的Demo数据库,很是诧异这样的问题微软就没发现吗?难道测试程序员不是用IE?
根据图片的命名方式,我们不难找出图片来自于哪个表,比如上图张打开产品具体信息时显示的图片,图片名为image_97_0_5637146045.jpg和image_97_0_5637146044.jpg,很容易看出它们都来自于附件表(DocuRef.TableId=97)。
[AX]AX2012 R2 EP员工自助服务中的产品不能显示图片的问题的更多相关文章
- [AX]AX2012 R2 出差申请和支出报告
AX2012中有个模块叫做出差和支出,用于管理出差以及相关的费用,用户只能在员工自助服务EP站点上提交出差申请.费用报销报告,在Client程序中做审核以及后续的支付动作等,最后形成相关的财务分录. ...
- [AX]AX2012 R2 HR Jobs, Positions, Department和Workers
部门.作业(Job的官方翻译)和位置(Position的官方翻译)是AX人力资源管理的基本组织元素,Job和Position在AX有的地方又称作工作和职位,其实这个翻译更为恰当. Job定义的是一个工 ...
- Dynamics AX 2012 R2 SSRS报表在VS2010中预览没有数据
今天,Reinhard 在VS中制作SSRS报表,预览的时候发现显示不出数据. 仔细检查了数据处理环节和临时表里的数据,都发现没有问题. 用同事的账号登陆同样的开发环境,发现他的账号可以在VS中预览到 ...
- [AX]AX2012 R2 采购订单的“Request change”
在采购订单List或者Detail窗口的操作面板上有一个叫做“Request change”的按钮,如果这个按钮是激活的,采购订单不能直接编辑,而必须先使用这个按钮请求修改后,采购订单才能进入编辑状态 ...
- win7中资源管理器不能显示图片预览的解决方法
在用xp的时候,在资源管理器里面预览图片文件是在普通不过的事情了.换到win7之后,图片文件一直不能预览,只是显示图标还挺烦的.肯定是哪里设置的不对,下午闲来无事,找到是哪里的问题了. 如果你也遇到相 ...
- 【Vue中的坑】vue项目中动态绑定src不显示图片解决方法
v-for绑定src的数据如下: data() { return { img_src:"../../assets/images/mirror-service.png" } } 渲染 ...
- Dynamics AX 2012 R2 外部程序运行在没有AD的环境(如PDA) 调用AX服务
Reinhard对这个问题研究了很久,也查了一些资料,整理了三种解决方案. 1.准备一台虚拟机A,A加入到了AD活动域,可以操作AX. PDA以远程桌面的方式,连接到虚拟机A. 在虚拟机上运行 ...
- 在工作组的环境中配置Windows 2012 R2的远程桌面服务
在工作组的环境中配置Windows 2012 R2的远程桌面服务 How to configure Remote Desktop Service in Windows 2012 R2 workgrou ...
- [译]Dynamics AX 2012 R2 BI系列-规划分析的注意事项
https://msdn.microsoft.com/en-us/library/gg731898.aspx 在开始实施AX的分析特性前,有很多事情要考虑.本文描述了你必须考虑的事情,和在 ...
随机推荐
- mysql archive存储引擎导入数据报duplicate key
DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ve ...
- mysql国内镜像下载网址
http://mirrors.sohu.com/mysql/ http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/ 开源镜像站点汇总 http://segme ...
- spring框架中的@Import注解
spring框架中的@Import注解 Spring框架中的@Import注解 在之前的文章中,作者介绍了Spring JavaConfig. 这是除了使用传统的XML文件之外,spring带来的新的 ...
- css3常用动画样式文件move.css
move.css zoomIn zoomInDownouter-circlearrowTop expandOpen fadeIn fadeInNormal fadeInUp fadeInRi ...
- Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)
1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...
- ajax传递参数给springmvc总结[转]
通过ajax传递参数给springmvc,经常会因为 参数类型太复杂,或者根本不知道springmvc都支持哪些类型转换,导致后台接收出现各种问题.如果书写格式没有问题仍然接受参数报错,大部分是因为s ...
- SQL Server默认1433端口修改方法
SQL Server默认端口1433端口并不是十分的安全,需要将SQL Server默认端口进行更改,在更改之前,让我们先了解一下什么是1433端口. 什么是1433端口 1433端口,是SQL Se ...
- Sword ACE编译
1.设置环境变量 #ACE_ROOT是指ACE解压目录 export ACE_ROOT=/home/person/2/ACE_wrappers export LD_LIBRARY_PATH=$ACE_ ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (八)
在本项目中使用到的“文本转语音”的技术总结: 文本转语音,使用的是科大讯飞的接口,因为此作品之中语音包不是重点,所以语音包的转换我们统一调用的科大讯飞的语音包接口,依旧是在线的文字转语音,客户端将来自 ...
- Self20171218_TestNG+Maven+IDEA环境搭建
前言: 主要进行TestNG测试环境的搭建 所需环境: 1.IDEA UItimate 2.JDK 3.Maven 一.创建工程 File –>new –>Project–>next ...