我在我的force.com应用程序中使用Apex类,其中许多具有相同的结构,我想制作一个API来重用它。
例如,这是两个类:
//first class
public class insererActAct{
public List<Activites_actuelles__c> accts {get; set;}
public insererActAct(ApexPages.StandardController controller){
accts = new List<Activites_actuelles__c>();
accts.add(new Activites_actuelles__c());
}
public void addrow(){
accts.add(new Activites_actuelles__c());
}
public PageReference deleteRow(){
if (accts.size()>1)
{
accts.remove(accts.size()-1);
}
return null;
}
public PageReference save()
{
insert accts;
Assure__c theParent = new Assure__c(id=accts[0].Activites_actuelles__c);
PageReference acctPage = new ApexPages.StandardController(theParent).view();
acctPage.setRedirect(true);
return acctPage;
}
}
//second class
public class insererEnfants{
public List<Enfants__c> accts {get; set;}
public insererEnfants(ApexPages.StandardController controller){
accts = new List<Enfants__c>();
accts.add(new Enfants__c());
}
public void addrow(){
accts.add(new Enfants__c());
}
public PageReference deleteRow(){
if (accts.size()>1)
{
accts.remove(accts.size()-1);
}
return null;
}
public PageReference save()
{
insert accts;
Assure__c theParent = new Assure__c(id=accts[0].Parent__c);
PageReference acctPage = new ApexPages.StandardController(theParent).view();
acctPage.setRedirect(true);
return acctPage;
}
}
谁能告诉我这是否可能,如果是,我该怎么做?
最佳答案
您的意思是您想要编写适用于不同类型对象的代码,而不是在代码中声明对象的类型吗?
可以通过使用 sObject 类型声明 sObject 变量来做到这一点,例如,而不是
public List<Activites_actuelles__c> accts {get; set;}
你会放
public List<sObject> sObjects{get; set;}
并通过使用 get 和 put 引用字段,例如而不是
Account theAccount = new Account();
theAccount.name = 'Fred';
你会放
sObject theSObject = new SObject();
theSObject.put('name', 'Fred');
我没有尝试在 Controller 扩展中使用这样的代码,但理论上,因为您可以传入任何标准 Controller ,所以应该没问题。
您需要考虑如何在 save 方法中创建父对象,因为您需要传入要创建的类型。它非常复杂,但可以接受表示对象类型(例如“Account”)的字符串并创建该类型的新对象:
Schema.getGlobalDescribe().get('Account').newSObject()
将为您提供一个新帐户。因此,您可以将“Account”替换为作为参数传入的任何类型。
有关详细信息,请参阅文档中的 Dynamic Apex、Dynamic SOQL 和 Dynamic DML。
警告:将对象类型和字段名称作为字符串传递意味着编译器将不知道代码中提到了这些类型。因此,如果您尝试删除自定义对象或重命名字段,Salesforce 不会警告您该对象或字段正在使用,并允许您进行删除。
另一句话警告:虽然这允许代码重用并且这是一个好处,但您可能会发现它不值得。除非绝对必要,否则我会避免编写动态顶点。它比普通的 apex 复杂得多,因此很难调试和维护,尤其是当除您之外的其他人必须维护它时。
关于salesforce - 创建我自己的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581287/