Ошибка VisualForce: значение Id недопустимо для стандартного контроллера Contact

Эта ошибка связана с тем, что идентификатор взят из!$User.Id нет!Contact.Id. Я не знаю, как решить эту проблему, потому что мне нужен contact.id. Поскольку я поместил страницу VF в пользовательскую ссылку, и я хочу, чтобы, когда пользователь щелкает по этой ссылке, заполнял информацию своими контактными полями. Ниже код для страницы VF:

<apex:page standardController="Contact">  
   <apex:form >
      <apex:pageBlock >
          <apex:pageBlockSection title="My Personal Information" >
          <apex:outputField value="{!Contact.Name}" />
          <apex:outputField value="{!Contact.Phone}"/>
          <apex:outputField value="{!Contact.MobilePhone}"/>
          <apex:outputField value="{!Contact.Email}"/>
          <apex:outputField value="{!Contact.Birthdate}"/>
     </apex:pageBlockSection>

     <apex:pageBlockSection title="My Travel Information">
          <apex:outputField value="{!Contact.Passport__c}"/>
          <apex:outputField value="{!Contact.Expiration_Date__c}"/>
          <apex:outputField value="{!Contact.VISA__c}"/>
          <apex:outputField value="{!Contact.VISA_Expiration_Date__c}"/>
          <apex:outputField value="{!Contact.European_Passport__c}"/>
          <apex:outputField value="{!Contact.European_Passport_Expiration_Date__c}"/>
      </apex:pageBlockSection>    

     </apex:pageBlock>
    </apex:form> 
</apex:page>

Заранее спасибо!

1 ответ

Самый простой способ будет получить доступ к вашей странице VF с помощью ссылки, аналогичной /apex/YourPageName?id=003... где 003... Идентификатор контакта, который вы хотите показать.

Где вы разместили пользовательскую ссылку? Это будет работать лучше всего, если он находится на контакте или на чем-то связанном с контактом (может быть, случай или какой-то пользовательский объект, у которого есть поиск для контакта).

Можете ли вы опубликовать скриншот определения ссылки? Если это в контакте, просто измените тип ссылки на "Страница Visualforce", и все готово. Если это что-то еще (например, случай), то тип должен быть URL: /apex/YourPageName?id={!Case.ContactId},


Редактировать после комментариев / уточнений

Попробуйте что-то подобное (вам понадобится класс apex + страница VF):

public class PersonalInfoEditor{
    public Contact con {get; set;}

    public PersonalInfoEditor(){
        List<Contact> contacts = [SELECT Id, FirstName, LastName, Phone, ... FROM Contact WHERE OwnerId = :UserInfo.getUserId() LIMIT 1]; // use your lookup instead of my OwnerId here

        if(contacts.isEmpty()){
            con = new Contact(OwnerId = UserInfo.getUserId()); // none found? let's prepare to save a new Contact for this user
        } else {
            con = contacts[0]; // found? then let's use him
        }
    }

    public void save(){
        upsert con;
    }
}

<apex:page controller="PersonalInfoEditor" tabStyle="Contact">  
   <apex:form >
      <apex:pageBlock >
          <apex:pageBlockButtons location="bottom">
              <apex:commandButton value="Save" action="{!save}" />
          </apex:pageBlockButtons>
          <apex:pageBlockSection title="My Personal Information" >
          <apex:inputField value="{!con.Phone}" />
          <apex:inputField value="{!con.Email}" />
          ...
Другие вопросы по тегам