0

你好 StackOverflow 社区,

我在 Force.com 进行开发,并且在 Visualforce 和 Apex 方面表现出色。我不擅长 Javascript,但在必要时往往会过关。在最近的一个项目中,我正在为一些非常基本的事情而苦苦挣扎,我认为 SO 是寻求帮助的最佳场所。

我利用 apex:pageblocktable(s) 向用户驱动“可用操作”。基本上页面加载,系统查询我的外部静态“动作”表并将当前记录中的数据与动作表记录进行比较。完成后,将向用户呈现结果:可用操作。

我遇到了一个问题。由于用户选择通用操作,有些操作我无法将 ?id= 作为参数传递。为了解决这个问题,我需要在我的 javascript 公式中添加一个简单的 IF 条件。下面我发布了我的代码......你的想法?

提前致谢!

当前代码:

<apex:pageBlock mode="edit" title="Other Actions">
<apex:pageBlockTable value="{!OtherActions}" var="action">
<apex:column>
<a href="javascript:sforce.console.openPrimaryTab(null, 'https://na15.salesforce.com/apex/{!action.URL__c}?actionname={!action.Name}', true, null, null, null);">{!action.Name}</a>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>

我的尝试:

下面的代码有效。然而,由于某种原因,用户选择的动作似乎总是列表中的最后一个动作。例如,如果加载了三个操作并且您选择了第二个。系统将表现得好像您选择了第三个动作......总是

<apex:pageBlock mode="edit" title="Other Actions">
<apex:pageBlockTable value="{!OtherActions}" var="action">
<apex:column>
<a href="#" onclick="MyFunction();return false;">{!action.Name}</a>
<script type="text/javascript">
    function MyFunction() {
        if({!action.Name} == 'Test'){
        sforce.console.openPrimaryTab(null , 'https://na15.salesforce.com/apex/{!action.URL__c}?id={!action.id}&actionname={!action.Name}', true, ' ', null, null);
        }
        else{
        sforce.console.openPrimaryTab(null , 'https://na15.salesforce.com/apex/{!action.URL__c}?actionname={!action.Name}', true, ' ', null, null);
        }        
    }
</script>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
4

2 回答 2

0

我想到了。我必须将参数传递给 Java 函数。这是最终的 VisualForce / Java 组合

VF

<apex:column >
<A HREF="#" onClick="openAction('{!action.External__c}', '{!action.ID}', '{!action.Name}', '{!action.URL__c}');return false">{!action.Name}</A>
</apex:column>

爪哇

  <script type="text/javascript"> 
    var TabID;
    var previousOnload = window.onload;       
    window.onload = function() {
    if (previousOnload) {
    previousOnload();
    }               
    setTimeout('setTabTitle()', '500');
    setTimeout('getTabID()', '500');
    }
    function setTabTitle() {
    sforce.console.setTabTitle('{!Member__c.Name}');
    }
    function getTabID() {
    sforce.console.getEnclosingPrimaryTabId(setTabID);
    }
    var setTabID = function setTabID(result) {
    TabID = result.id;
    }
    function openAction(external, id, name, url) {
        if(external == 'true'){
        sforce.console.openPrimaryTab(TabID, 'https://na15.salesforce.com/apex/' + url, true, ' ');
        }
        else{
        sforce.console.openPrimaryTab(null, 'https://na15.salesforce.com/apex/' + url + '?id=' + id, true, ' ');
        }
    }
</script>
于 2014-04-09T00:30:25.377 回答
0

我想你是想写

if('{!action.Name}' == 'Test')

代替

if({!action.Name} == 'Test')

不同之处在于第一个将比较两个字符串,而第二个将变量与字符串进行比较(例如,如果变量 Test 未定义,if(Test == 'Test') 将返回 false)

于 2014-04-07T13:45:54.490 回答