我试图从VisualForce页面生成干净的XSL-FO.但是,由于嵌套的apex:outputPanel标签(外部渲染=真,内部渲染=假)生成的空跨度标记,因此来自VisualForce页面的xml无效.这是一个聚焦页面,说明了问题:
<apex:page contentType="text/xml" cache="false" showHeader="false" sidebar="false">
<root>
There is no reason for a nested apex:outputpanel to generate a span tag like this:
<apex:outputPanel layout="none" rendered="true">
<apex:outputPanel layout="none" rendered="false" />
</apex:outputPanel>
This breaks strict xml documents like XSL-FO.
</root>
</apex:page>
Run Code Online (Sandbox Code Playgroud)
该页面给出了这个xml输出:
<root>
There is no reason for a nested apex:outputpanel to generate a span tag like this:
<span id="j_id0:j_id3" style="display: none;"></span>
This breaks strict xml documents like XSL-FO.
</root>
Run Code Online (Sandbox Code Playgroud)
实际上,我确实在文档中找到了一个模糊的原因:
apex:outputPanel布局属性 - 面板的布局样式.可能的值包括"block"(生成HTML div标签),"inline"(生成HTML span标签)和"none"(不生成HTML标签).如果未指定,则此值默认为"none".但是,如果layout设置为"none",则对于渲染属性设置为"false"的每个子元素,outputPanel会生成一个span标记,其中包含每个子节点的ID,并且style属性设置为"display:none" …
我想将Salesforce VisualForce页面转换为我公司网站的小部件.我想使用服务器端代码和服务帐户访问小部件.我将在我的网页中缓存,设置和输出小部件html.我知道我可以用服务器端代码和几个API调用来重现小部件,但我喜欢能够在Salesforce中管理小部件并让小部件可以在Salesforce中的其他地方重用.
在这种情况下,小部件将报告我们在Salesforce中跟踪的竞赛中的当前领导者.我计划将这种方法重用于其他"迷你报告小部件".这是一个非常有用的模式.我相信那里的人已经优雅地解决了它.到目前为止,我的搜索空洞.
我试图避开网站,因为用户点击我们的公司网站在Salesforce中没有用户帐户(现在我正在考虑允许匿名访问的网站).
我的第一次尝试看起来像这样(受SSO到自助服务门户的启发):
var ws = new sfapi.SforceService();
var lr = ws.login(Secrets.salesforce_user_name, Secrets.salesforce_password);
string url = "https://na6.salesforce.com/apex/mywidget?sessionId=" + lr.sessionId;
Run Code Online (Sandbox Code Playgroud)
我也试过了?sid和?csssid,但是这些网址只是让我跳到Salesforce登录页面:
https://na6.salesforce.com/apex/mywidget?sessionId=00D3000000myorg!my-session-id-from-logging-in-with-the-api-8_i2fX_9wnYdwnwatGVuX6jGjmVmnv50j78yfGF1aKHdoDFtIx_J9
Run Code Online (Sandbox Code Playgroud)
我可以使用标准的屏幕抓取技术,使用用户名和密码发布到标准的Salesforce登录表单,然后拉/ apex/mywidget页面.但这感觉笨拙且没有支持.
现在我正在考虑制作一个公开可用的新网站来公开我的小部件.至少我可以放心地屏幕抓住那页.
任何帮助表示赞赏.我现在打算使用匿名网站方法.
我可以使用如下公式轻松计算导致的年龄(以分钟为单位):
ROUND((NOW()-CreatedDate)*1440,0)
Run Code Online (Sandbox Code Playgroud)
但是,我只想计算该时间跨度的营业时间(实际上是分钟).我想在Salesforce公式(不是顶点触发器)中执行此操作.我在这里和这里找到了一些灵感.我对此解决方案的优先级:
想要算一下工作日的数量?这个公式在873个编译字符中进行比较,相比之下Salesforce Support 示例中建议的模板中的1,685个(有些人抱怨在将较大模板与其他代码组合时超过5,000个字符限制).
(
5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5, MOD(TODAY()-DATE(1996,01,01), 7))
) - (
5*FLOOR((DATEVALUE(CreatedDate)-DATE(1996,01,01))/7) +
MIN(5, MOD(DATEVALUE(CreatedDate)-DATE(1996,01,01), 7))
)
Run Code Online (Sandbox Code Playgroud)
阅读我的答案,了解它是如何工作的,以及如果您需要它甚至可以计算营业时间.