Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Salesforce 创建我自己的API_Salesforce_Apex Code_Visualforce - Fatal编程技术网

Salesforce 创建我自己的API

Salesforce 创建我自己的API,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,我在force.com应用程序中使用了Apex类,其中许多类都具有相同的结构,我想制作一个API以在以后重用它 例如,有两类: //first class public class insererActAct{ public List<Activites_actuelles__c> accts {get; set;} public insererActAct(ApexPages.StandardController controller){ accts = new Li

我在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;
}
}
//第一类
公共类嵌入行为{
公共列表帐户{get;set;}
公共insereract(ApexPages.StandardController){
accts=新列表();
账户添加(新活动);
}
public void addrow(){
账户添加(新活动);
}
公共页面引用deleteRow(){
如果(帐户大小()>1)
{
账户移除(账户大小()-1);
}
返回null;
}
公共页面引用保存()
{
插入账户;
Assure\uu c theParent=新Assure\uu c(id=账户[0]。活动\u actuelles\uu c);
PageReference acctPage=新建ApexPages.StandardController(theParent.view();
acctPage.setRedirect(真);
返回账户;
}
}
//二等舱
公营班学生{
公共列表帐户{get;set;}
公共插入儿童(ApexPages.StandardController){
accts=新列表();
账户添加(新儿童);
}
public void addrow(){
账户添加(新儿童);
}
公共页面引用deleteRow(){
如果(帐户大小()>1)
{
账户移除(账户大小()-1);
}
返回null;
}
公共页面引用保存()
{
插入账户;
Assure\uuu c家长=新家长(id=accts[0]。家长\uuu c);
PageReference acctPage=新建ApexPages.StandardController(theParent.view();
acctPage.setRedirect(真);
返回账户;
}
}

有人能告诉我这是可能的还是不可能的吗?如果是的话,我该怎么做呢?

你的意思是你想编写适用于不同类型对象的代码,而不是在代码中说明对象的类型

可以通过使用sObject类型声明sObject变量(例如,而不是

public List<Activites_actuelles__c> accts {get; set;}
Account theAccount = new Account();
theAccount.name = 'Fred';
你会把

public List<sObject> sObjects{get; set;}
sObject theSObject = new SObject();
theSObject.put('name', 'Fred');
我没有尝试在控制器扩展中使用这样的代码,但从理论上讲,因为您可以传入任何标准控制器,所以应该可以

您需要考虑如何在save方法中创建父对象,因为您需要传入要创建的类型。这相当复杂,但可以接受表示对象类型的字符串(例如“Account”),并创建该类型的新对象:

Schema.getGlobalDescribe().get('Account').newSObject()
我会给你一个新帐户。因此,您可以将“Account”替换为作为参数传入的任何类型

有关更多信息,请在文档中查找dynamicapex、dynamicsoql和dynamicdml

警告:将对象类型和字段名作为字符串传递意味着编译器不知道代码中提到了这些类型。因此,如果您尝试删除自定义对象或重命名字段,salesforce将不会警告您该对象或字段正在使用,并允许您执行删除操作


另一个警告:虽然这允许代码重用,这是一个好处,但您可能会发现它不值得。除非万不得已,否则我会避免写动态顶点。它比普通apex复杂得多,因此很难调试和维护,尤其是当您以外的人必须维护它时。

您的意思是您想编写适用于不同类型对象的代码,而不是在代码中说明对象的类型吗

可以通过使用sObject类型声明sObject变量(例如,而不是

public List<Activites_actuelles__c> accts {get; set;}
Account theAccount = new Account();
theAccount.name = 'Fred';
你会把

public List<sObject> sObjects{get; set;}
sObject theSObject = new SObject();
theSObject.put('name', 'Fred');
我没有尝试在控制器扩展中使用这样的代码,但从理论上讲,因为您可以传入任何标准控制器,所以应该可以

您需要考虑如何在save方法中创建父对象,因为您需要传入要创建的类型。这相当复杂,但可以接受表示对象类型的字符串(例如“Account”),并创建该类型的新对象:

Schema.getGlobalDescribe().get('Account').newSObject()
我会给你一个新帐户。因此,您可以将“Account”替换为作为参数传入的任何类型

有关更多信息,请在文档中查找dynamicapex、dynamicsoql和dynamicdml

警告:将对象类型和字段名作为字符串传递意味着编译器不知道代码中提到了这些类型。因此,如果您尝试删除自定义对象或重命名字段,salesforce将不会警告您该对象或字段正在使用,并允许您执行删除操作


另一个警告:虽然这允许代码重用,这是一个好处,但您可能会发现它不值得。除非万不得已,否则我会避免写动态顶点。它比普通的apex复杂得多,因此很难调试和维护,尤其是当您以外的人必须维护它时。

感谢您的帮助和澄清!我还有一个问题,如何在子对象中自动插入master relationship字段的值,因为我的每个子对象都有一个父对象?您可以使用GetDescripte()执行复杂的操作,以了解父对象是什么类型的对象(如果可能,则不确定),但我认为在自定义设置中保留对象类型名称(作为字符串)会更容易。感谢您的响应,但我有一个VF inputField
,其中我每次都必须插入该值,但该值是唯一的,父名称,我如何自动传递和插入该值(父名称),这是我的问题。谢谢你的帮助和澄清!我还有一个问题,如何在子对象中自动插入master relationship字段的值,因为我的每个子对象都有一个父对象?您可以使用GetDescripte()执行复杂的操作,以了解父对象是什么类型的对象(如果可能,则不确定),但我认为在自定义设置中保留对象类型名称(作为字符串)会更容易。感谢您的响应,但我有一个VF inputField
,其中我每次都必须插入该值,但该值是唯一的,父名称,ho