Microsoft Dynamics CRM 2011 & Business Productivity - Jim Wang's blog [MVP]

Welcome to my blog: http://mscrm.cn [Chinese] & http://jianwang.blogspot.com [English]

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  23 随笔 :: 52 文章 :: 103 评论 :: 5 引用
IFrame里显示实体关联视图的技术经常被使用。比如你的自定义实体new_myentity和系统实体account建立了关联,无论是 1:N,还是N:N,下面的代码都可以显示出来关联视图。你唯一要做的是找到navId (可以用IE Developer Toolbar),然后替换下面的"nav_new_new_myentity_account"就可以了。



var navId = "nav_new_new_myentity_account";

if(document.getElementById(navId) != null)
{
  
var tmp = document.getElementById(navId).onclick.toString();
  tmp 
= tmp.substring(tmp.indexOf("'")+1, tmp.indexOf(";"));
  
var loadArea = tmp.substring(0, tmp.indexOf("'"));
  
var roleOrd =  (tmp.indexOf("roleOrd"== -1? -1 : tmp.substring( tmp.indexOf("roleOrd"), tmp.lastIndexOf("'")).replace("\\x3d""=");
  crmForm.all.IFRAME_view.src 
= (roleOrd == -1? GetFrameSrc(loadArea) : GetFrameSrc(loadArea) + "&" + roleOrd;

}

function GetFrameSrc(tabSet)
{
  
if (crmForm.ObjectId != null)
  {
    
var id = crmForm.ObjectId;
    
var type = crmForm.ObjectTypeCode;
    
var security = crmFormSubmit.crmFormSubmitSecurity.value;
    
var path = document.location.pathname.substring(0, document.location.pathname.indexOf("edit.aspx")) + "areas.aspx?";

    
return (path + "oId=" + id + "&oType=" + type + "&security=" + security + "&tabSet=" + tabSet);
  }
  
else
  {
    
return "about:blank";
  }
}

posted on 2009-07-19 21:26 Jim Wang 阅读(834) 评论(10)  编辑 收藏

评论

Jim 您好,

我在Account里面用IFRAME显示了activities,但是现在有个问题,每次打开一个account之后我都需要点击 new Activity 去打开一个新窗口去填写信息.
我现在想把这个new Activity的窗口在IFRAME里面显示出来,这样我每次打开一个Account之后就能直接输入信息然后保存.
不知道能否实现?
 回复 引用   

#2楼[楼主] 2009-08-07 18:52 Jim Wang      
这个new activity是指什么?
 回复 引用 查看   

用你的方法在IFRAME里面显示了activities,就是navid = "navActivities"这个.显示出来之后,IFRAME里面的左上角有一个新建,点击之后弹出来窗口填写activity的信息.可能这个activities的实体例子有点特殊,弹出来的窗口是可以选择 Task, Fax, Phone Call 等等.我的意思指的是能不能把1:N关系的实体中的“新建”也就是new Entity(这里的Entity指的是自己新建或者系统自带的实体的名称),点击他们之后出现相应的新建窗口能否直接调用显示到IFRAME里面。
 回复 引用   

#4楼[楼主] 2009-08-07 21:30 Jim Wang      
点击Activity,然后自动弹出这个窗体应该没有问题,但是不应该镶嵌到IFRAME里面,否则你的Activity列表怎么办啊。
 回复 引用 查看   

@Jim Wang
自动弹出是没有问题的,一切都好,activity没问题,不过现在给公司加了一个新的实体,是专门记录客户需求的,销售说这样每次打开那个新实体去添加信息太浪费时间了,而且crm4.0运行的太慢,他说想直接加到account里面去,直接填写保存,自动存储到新实体的列表当中.所以才想到能不能用IFRAME去显示这个谈出来新建窗口.
 回复 引用   

@Jim Wang
而且添加完了之后还要显示在那个新实体的列表当中,也就是用IFRAME在account里面用你的方法调用的界面。就是说销售想在同一张页面当中或者同一个页面的另一个tab当中,当他输入了信息之后点击保存,然后保存的信息自动显示到另一个IFRAME的列表当中。这两部分他想在一个页面中显示,不想开多个窗口点来点去,填来填去。
 回复 引用   

@Jim Wang
还有一个问题,就是用你的方法去用IFRAME显示了Activities之后,里面默认是显示最近30天,或者今后30的activities,可是销售想看all activities,然后自己再选择哪一天的。他说这样方便一些.问一下jim,如何改变这个默认值呢?
 回复 引用   

#8楼[楼主] 2009-08-07 22:01 Jim Wang      
可以啊,那直接用IFRAME包含这个新实体URL即可,当然还有一些配套代码。
 回复 引用 查看   

#9楼[楼主] 2009-08-07 22:05 Jim Wang      
那个天数的问题可以用plugin来实现,论坛里搜一下,以前有人问过。
我2年前也写过一个方法:http://jianwang.blogspot.com/2007/11/microsoft-crm-filter-on-last-30-days.html
 回复 引用 查看   

引用Jim Wang:可以啊,那直接用IFRAME包含这个新实体URL即可,当然还有一些配套代码。

就是这些代码,我不知道如何去调用,就是设置这个URL显示的时候是与当前的account里面的某些信息是有关联的,比如负责人,联系人之类的。能否在您有空闲时间的时候写篇blog介绍一下相关信息
 回复 引用