有没有办法检测插入的记录是否是触发器中克隆操作的结果?
作为托管包的一部分,我想在克隆Opportunity和OpportunityLineItem记录时清除一些自定义字段.
或者是一个触发器不是防止某些字段被克隆的正确位置?
我曾考虑过创建专用代码来调用sObject.Clone()并排除不需要的字段.这似乎不是托管包的理想解决方案,因为它还会排除Opportunity上的任何其他自定义字段.
我有一个Visualforce页面,嵌入在Opportunities的详细信息页面上.
在页面内是一个命令按钮,用于调用后备控制器扩展中的方法.
支持方法完成后,如何将用户重定向到另一个页面?
我可以从方法返回一个PageReference,但它只会重定向显示嵌入式Visualforce页面的iframe.
理想情况下,我想刷新顶级窗口,但我担心如果嵌入式visualforce页面与父窗口不在同一个域中,则可能存在跨域问题.
作为基本测试,我尝试将以下内容添加到嵌入式Visualforce页面:
<script>
window.setTimeout(testRedirect,2000);
function testRedirect() {
top.location.reload();
}
</script>
Run Code Online (Sandbox Code Playgroud)
这导致Chrome记录错误:
不安全的JavaScript尝试与URL访问框架 https://na2.salesforce.com/006400000000000从框架与URL https://ab2.na2.visual.force.com/servlet/servlet.Integration?lid=066400000000000&ic=1.域,协议和端口必须匹配.
因此,Visualforce页面的域名不同.
如何为生成的电子邮件主题指定布局和conversionPattern?
BufferSize需要小于或等于1,因此不会发生缓冲.
我使用Apex Test Execution屏幕在沙箱组织中运行所有测试用例.
几个测试用例通过然后进展似乎挂在一个以前工作的测试用例上.
然后我使用Abort按钮尝试取消似乎有效的测试执行.
现在,任何后续运行测试的尝试都不会超过Queued状态.

选择单个顶点类并使用同步"运行测试"按钮会导致以下错误消息:
组织管理已锁定
您请求的更改要求salesforce.com临时锁定组织的管理设置.但是,管理设置已被另一个更改锁定.请等待上一个操作完成,然后再重试.
尝试从Eclipse保存对Apex类的更改会产生错误:
- 保存错误:无法对所有文件执行保存:您请求的更改要求> salesforce.com临时锁定组织的管理设置.但是,管理设置已被另一个更改锁定.请等待>之前的操作完成,然后稍后再试.(ALREADY_IN_PROCESS)
如果我查询ApexTestQueueItem表,似乎有3个测试用例符合处理状态.

如何从处理状态清除这些ApexTestQueueItems?我假设这会让我超过组织管理锁定.
我确实检查了设置审计跟踪,最近的唯一更改是从我的用户到Apex Classes.
我正在寻找一种技术,以保护用户免受CSRF的方式从添加到Opportunity对象的自定义按钮执行Apex代码.
当前使用的方法来自问题 - 自定义按钮或链接到带有自定义控制器的Visualforce页面.实质上:
这种方法的问题是第二个自定义Visualforce页面是通过HTTP GET检索的,从查询字符串中提取参数,并执行更新/插入DML操作而没有CSRF保护.这是由Force.com安全源代码扫描程序提取的.
我应该补充一点,这个顶点代码被部署为托管和非托管包,因此使用PageReference重定向到目标Visualforce页面的额外工作.这可确保在需要时添加名称空间前缀.
如何避免CSRF问题?
我不想在第二个visualforce页面上添加一个表单,只需按一下按钮即可启动该进程(从而在回发中获取ViewStateCSRF保护).从用户的角度来看,他们已经按下按钮来执行操作.
我之前在开发人员论坛上问过这个问题并没有提出解决方案 - 跨站点请求伪造(CSRF/XSRF)安全自定义按钮操作
也许我应该尝试将代码从控制器中移出第二个可视化力页并使用扩展到支架控制器?
我可以切换到Apex Web服务的Javascript回调(如从自定义按钮调用apex方法和如何从自定义按钮调用APEX方法中的建议),但它看起来有点乱,我不确定我是不是只是打开Web服务的另一系列安全问题.
我有一个DataGridView,其中SelectionMode = FullRowSelect和MultiSelect = False.
当用户单击某行时,会按预期选择该行.但是,再次单击同一行不会取消选择该行.
如何进行行选择以在选定和未选择之间切换?
我有一个T4模板,与TextTemplatingFilePreprocessor一起使用,生成一个类,然后我可以用它来生成模板的输出.
在T4模板的开头,我导入了几个名称空间.例如
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
//...
Run Code Online (Sandbox Code Playgroud)
我想使用预处理程序指令将这些导入与另一组命名空间(它们提供相同的接口但与ProductX具有不同的功能)相关联.例如
<#
#if(ProductX)
{
#>
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
//...
<#
}
#endif
#>
<#
#if(ProductY)
{
#>
<#@ import namespace="Company.ProductY.Widgets" #>
<#@ import namespace="Company.ProductY.Services" #>
//...
<#
}
#endif
#>
Run Code Online (Sandbox Code Playgroud)
使用上面的示例,无论预处理程序指令如何,导入似乎都会在类中创建相应的using语句.例如
using Company.ProductX.Widgets
using Company.ProductX.Services
using Company.ProductY.Widgets
using Company.ProductY.Services
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法可以在T4模板中使用预处理器来影响模板本身而不仅仅是模板输出?
我有一个Visualforce页面使用自定义控制器,用于编辑机会下的多个记录.
我想创建一个从Opportunities到此Visualforce页面的自定义按钮或链接.
目前链接如下:
/apex/ExamplePage?oppId={!Opportunity.Id}
Run Code Online (Sandbox Code Playgroud)
这在开发沙箱中工作正常,但是当它作为托管包的一部分部署时,链接会断开,因为页面引用没有名称空间前缀.
我在Force.com讨论板上发现了托管包重定向问题,暗示应该可以使用$ Page来引用URL中的Visualforce页面.例如
{!URLFOR($Page.MyExamplePage,'',[objectId = campaign.id])}
Run Code Online (Sandbox Code Playgroud)
但这样做只会给我语法错误:
错误:字段$ Page.MyExamplePage不存在.检查拼写.
该帖子的另一部分建议使用Apex类和Execute Javascript来解决它.但在我看来,这只是将名称空间问题转移到了Javascript中.
如何安全地引用Visualforce页面以在托管包内外工作?
我正在将一些C#Windows Phone 7应用移植到Windows 8.
手机应用程序使用XNA SoundEffect从缓冲区播放任意声音.在最简单的情况下,我只需要创建所需持续时间和频率的正弦波.持续时间和频率都可以变化很大,所以我宁愿不依赖MediaElements(除非有一些方法可以改变基本文件的频率,但这只会帮助我生成单频率).
WinRT中的XNA SoundEffectInstance相当于什么?
我假设我需要使用DirectX,但我不知道如何从其他C#/ XAML应用程序中解决这个问题.我已经看过SharpDX,但它似乎没有我认为我需要使用的DirectSound,SecondaryBuffer,SecondaryBuffer类.
我已经做了一些上面的假设.可能是我正在寻找错误的类,或者有一种完全独立的方式从Windows 8应用程序生成任意声音.
我找到了一个使用SharpDX的XAudio2通过AudioBuffer播放wav文件的例子.这似乎很有希望,我只需要将生成的音频缓冲区替换为本机文件流.
PM>安装包装SharpDX
PM> Install-Package SharpDX.XAudio2
public void PlaySound()
{
XAudio2 xaudio;
MasteringVoice masteringVoice;
xaudio = new XAudio2();
masteringVoice = new MasteringVoice(xaudio);
var nativefilestream = new NativeFileStream(
@"Assets\SpeechOn.wav",
NativeFileMode.Open,
NativeFileAccess.Read,
NativeFileShare.Read);
var soundstream = new SoundStream(nativefilestream);
var waveFormat = soundstream.Format;
var buffer = new AudioBuffer
{
Stream = soundstream.ToDataStream(),
AudioBytes = (int)soundstream.Length,
Flags = BufferFlags.EndOfStream
};
var sourceVoice = new SourceVoice(xaudio, waveFormat, true);
// …Run Code Online (Sandbox Code Playgroud) salesforce ×5
apex-code ×2
c# ×2
visualforce ×2
.net ×1
csrf ×1
datagridview ×1
decimal ×1
directx ×1
iframe ×1
log4net ×1
random ×1
sharpdx ×1
t4 ×1
triggers ×1
winforms ×1
winrt-xaml ×1