• sumit singh 37
  • SMARTIE
  • 1200 Points
  • Member since 2015

  • Chatter
    Feed
  • 8
    Best Answers
  • 4
    Likes Received
  • 6
    Likes Given
  • 1
    Questions
  • 54
    Replies
MIXED_DML_OPERATION, DML operation on setup object is not permitted after you have updated a non-setup object (or vice versa): Account, original object: EmailTemplate: []
I'm trying to have a date from the account map to all the tasks associated with the account. The Field on Account is Date_Accepted__c and on the Task is also Date_Accepted__c. I currently have a trigger (thanks to help from this board) That populates the Date Accepted on the task when a new task is created, but if I change the date on the account, it doesn't change the date on the task. Is this possible to do with a trigger?  Here is what I have so far, its a trigger on the task. I'm guessing it would have to be a trigger on the account instead:

trigger Triggertask on Task (before insert) {
    
        id accountid ;
  for(Task task: Trigger.new) 
{
       Schema.SObjectType token = task.whatid.getSObjectType();

   if(token.getDescribe().getname()=='Account')
        accountid= task.whatid;
}
  if(accountid!=null)
  {
    account act= [select Date_Accepted__c from account where id=:accountid];
    
    for(Task tsk:Trigger.new)
    {
        tsk.Date_Accepted__c=act.Date_Accepted__c;
    }
  }

}
Having a problem with my first Visualforce email template. I'm trying to show order products on the email, and I can't find the answer on my own to fix the error in question title. All help is greatly appreciated!

My code is:

<messaging:emailTemplate subject="Downpayment Received from {!relatedTo.Account.Name} for Order {!relatedTo.OrderNumber}" recipientType="User" relatedToType="Order">

<messaging:htmlEmailBody >   
<html>
        <body>
         <STYLE type="text/css">
               TH {font-size: 13px; font-face: arial;background: #CCCCCC; border-width: 1;  text-align: center }
               TD  {font-size: 13px; font-face: verdana }
               TABLE {border: solid #CCCCCC; border-width: 1}
               TR {border: solid #CCCCCC; border-width: 1}
         </STYLE>
                  <font face="arial" size="2">               
<p>Hello!</p>
<p>We received the downpayment from {!relatedTo.Account.Name} for Order {!relatedTo.OrderNumber} on {!relatedTo.Payment_Received_1__c}.</p>
<p>Products on this order are:</p>
<apex:repeat var="lineItem" Value="{relatedTo.OrderItems}" >
<p>({lineItem.Quantity})- {lineItem.PricebookEntry} - {lilneItem.OrderProduct.Description__c} [{lineItem.OrderProduct.Screen_Opening__c}</apex:repeat> </p>
<p>The currently scheduled ship date for this order is {!relatedTo.Assigned_Ship_Date__c}. The salesman for this order is {!relatedTo.Salesman__c}.</p>
<p>Thank you!</p>
</font>
   </body>
  </html>
</messaging:htmlEmailBody>
</messaging:emailTemplate>
 
I'm capturing the date a sales rep accepts a lead into their funnel using a Date_Accepted__c field on the account. I want to map this to a Date_Accepted__c field all tasks associated with the account. I've tried doing this with a formula field and a workflow and was unable to do it because Task is not a child of Account. Is there an apex trigger I could use to map this date from account to task? 
i created a vf page for custom command button and add it on all layouts ,
but when i am accessing my org by salesforce1 app the button is not visible . please tell me what should i do ,....

Thanks in advance
I need a formula that will calculate the difference between Projected Fees and Actual pro-rated Fees but does not include our first year accounts. I have tried the following: 
IF (First_Year_Account__c) = "false"
     Pro_Rata_Agreement_Fee__c  -  Projected_FY_Fee__c

 I get the following message: Error: Syntax error. Extra Pro_Rata_Agreement_Fee__c

 The First Year Account field is a check box that is only checked during the first annual term of the account.
Any help would be appreciate.
Julie J
I have created a custom button called "Log-A-Call" and placed it on the opt of the Contact Page...
User-added image
The code behind the button looks like this...
/00T/e?title=Call&what_id={!Contact.Id }&followup=1&tsk5=Call&retURL={!Contact.Id }
The only issue is when a User clicks the button, the fields for Contact and Account d not populate.
I'm still learning how to write APEX code, and I am not sure how to write this.
Thanks

Hello all,

I have a batch job using SOA that calls out to an internal (in-house) application.  It has been working
for quite a long time, but recently we started seeing some batches (not all) get a System.CalloutException
as follows:

06:06:00.443 (14443246995)|EXCEPTION_THROWN|[107]|System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: [WliSbTransports:381304]Exception in HttpOutboundMessageContext.RetrieveHttpResponseWork.run: java.net.SocketTimeoutException
java.net.SocketTimeoutException
    at weblogic.net.http.AsyncResponseHandler$MuxableSocketHTTPAsyncResponse$SocketTimeoutNotification.<clinit>(AsyncResponseHandler.java:551)
    at weblogic.net.http.AsyncResponseHandler$MuxableSocketHTTPAsyncResponse.handleTimeout(AsyncResponseHandler.java:396)
    at weblogic.net.http.AsyncResponseHandler$MuxableSocketHTTPAsyncResponse.timeout(AsyncResponseHandler.java:502)
    at weblogic.socket.SSLFilterImpl.timeout(SSLFilterImpl.java:282)
    at weblogic.socket.SocketMuxer$TimerListenerImpl.timerExpired(SocketMuxer.java:985)
    at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
 faultcode=BEA-380000 faultactor=

Here are the relevant debug log entries:
>>>> this shows the configured (via a custom setting) max timeout of 2 minutes (right?)
06:05:46.0 (197739069)|USER_DEBUG|[252]|DEBUG|(doCallout) endpoint: https://soa-app.tpa.bhn.net:8110/ConstInt/CarlInfo?wsdl, timeout: 120000
>>>> this is the last entry before the synchronous callout
06:05:46.0 (439200493)|CALLOUT_REQUEST|[107]|getCarlInfo:[apex_schema_type_info=(carl.bhntampa.com, false, false), carlIds=307141, 308773, 309197, 308791, 326971, 294926, 316435, 326760, 327228, 314680, 314489, 317260, 299892, 312385, 309598, 301140, 283894, 316860, 327205, 306558, 315239, 187167, 283499, 366190, 314846, 314204, 314218, 298740, 317291, 314966, 367312, 317912, 366192, 366885, 285552, 309794, 313714, 285551, 309799, 285556, 335527, 282875, 367483, 309792, 285555, 367206, 307672, 309793, 313710, 318240, 301444, 310414, 317464, 291091, 305452, 316534, 369654, 317681, 367509, 316826, 363161, 318429, 308501, 315622, 357571, 318474, 318445, 276556, 316827, 367554, 317563, 367617, 367639, 361574, 304283, 367622, 367684, 318688, 367635, 316824, 367620, 305672, 318690, 363247, 316680, 318839, 367338, 318272, 318635, 304198, 318943, 311999, 286633, 313896, 313898, 338556, 316599, 307264, 318066, 326252, 359683, 318040, 318488, 319218, 315600, 319380, 319216, 334011, 318720, 318877, 327051, 318686, 314722, 274227, 316562, 318408, 319368, 315057, 319425, 316158, 290370, 318412, 310072, 313894, 309139, 343561, 318838, 380595, 319627, 313901, 313893, 313897, 327385, 313892, 305756, 311043, 315546, 298078, 327341, 294253, 319733, 318522, 314642, 318990, 274475, 307625, 294247, 294662, 282970, 294242, 294249, 314551, 288192, 275062, 318989, 319863, 311041, 318991, 300342, 319962, 319864, 318911, 319822, 318144, 33333, 362321, 358863, 320091, 298431, 321948, 320118, 351615, 359145, 317533, 327439, 362110, 321945, 316868, 360864, 364416, 321947, 327486, 373387, 327507, 319135, 286913, 319805, 339553, 320244, 317938, 318977, 368429, 368203, 364806, 313374, 318067, 327363, 320301, 319945, carlIds_type_info=(carlIds, carl.bhntampa.com, null, 1, 1, false), field_order_type_info=(carlIds)]::SOAPAction="" Accept=text/xml User-Agent=SFDC-Callout/36.0 SFDC_STACK_DEPTH=1 Content-Type=text/xml; charset=UTF-8 

>>>> here is the next entry, which occurs not 2 minutes later, but about 14 seconds later
06:06:00.443 (14443246995)|EXCEPTION_THROWN|[107]|System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: [WliSbTransports:381304]Exception in HttpOutboundMessageContext.RetrieveHttpResponseWork.run: java.net.SocketTimeoutException

What am I missing here?   I started with the assumption that the server I am calling is not keeping up, and that that is the reason for the timeout.  But the developer tells me he sees these being responded to in at most 10-12 seconds... s

So my real question is:
1.  Is it possible that something in our SOA middleware is throwing this exception, and not Salesforce?

Thanks,

Mitch
 

 public List<String> kamNa {
        get {
            if (kamNames == null) {                
                kamNames = new List<String>();
                Schema.DescribeFieldResult field1 = Brokerage__c.Control__c.getDescribe();                
                for (Schema.PicklistEntry f : field.getPicklistValues())
                    kamNa.add(f.getLabel());               
            }
            return kamNa;          
        }
        set;
    } 
 public List<String> kamNa {
        get {
            if (kamNames == null) {                
                kamNames = new List<String>();
                Schema.DescribeFieldResult field1 = Brokerage__c.Control__c.getDescribe();                
                for (Schema.PicklistEntry f : field.getPicklistValues())
                    kamNa.add(f.getLabel());               
            }
            return kamNa;          
        }
        set;
    } 
Hi

Rather than have multiple fields on the page layout I would like to use 'Conditional Rendering' my question and it's very basic is :

I wish to add a custom check box field to the account page labeled "Account at Risk' & if the check box = true for three adtional fields to appear labeled 'Monitor date', 'Value' & 'Percentage'.

What code would be required here ?

Many thanks
Stephen
I currently have a workflow that triggers if a field (picklist) is updated. The formula is 
AND( 
NOT(ISNEW()),
ISCHANGED(Hire_Type__c),
NOT(ISBLANK(PRIORVALUE(Hire_Type__c))), 
AVTRRT__Terminated__c = false )

I'm looking to create a new workflow that triggers a different email alert when the field is changed to the value Subscription.  So I'd like to update the existing formula above to not trigger if the field's new value is Subscription and create a new workflow that triggers only when the field is updated and the new value is Subscription, just not sure what functions will be best.  

Help appreciated! =)
MIXED_DML_OPERATION, DML operation on setup object is not permitted after you have updated a non-setup object (or vice versa): Account, original object: EmailTemplate: []
I'm attempting to work with Kixie (VOIP phone service which plugs in to SF) to log calls automatically. Kixie support says I need to access Field Accessibility/Events in order to enable the links to the call recordings to be logged. Problem is, there's no menu called "Field Accessibility" under my security settings. How can I gain access? 
I'm trying to have a date from the account map to all the tasks associated with the account. The Field on Account is Date_Accepted__c and on the Task is also Date_Accepted__c. I currently have a trigger (thanks to help from this board) That populates the Date Accepted on the task when a new task is created, but if I change the date on the account, it doesn't change the date on the task. Is this possible to do with a trigger?  Here is what I have so far, its a trigger on the task. I'm guessing it would have to be a trigger on the account instead:

trigger Triggertask on Task (before insert) {
    
        id accountid ;
  for(Task task: Trigger.new) 
{
       Schema.SObjectType token = task.whatid.getSObjectType();

   if(token.getDescribe().getname()=='Account')
        accountid= task.whatid;
}
  if(accountid!=null)
  {
    account act= [select Date_Accepted__c from account where id=:accountid];
    
    for(Task tsk:Trigger.new)
    {
        tsk.Date_Accepted__c=act.Date_Accepted__c;
    }
  }

}
I'm having a bit of trouble writing a test class for the Messaging.InboundEmailHandler class.  I am stuck at 44%.  Any suggestions on how I can achieve 100% code coverage would be greatly appreciated.

Apex Class
// Apex class used to capture reply emails from clients and attach 
// to their lead record
// A task is created against the lead record with the 
// contents of the reply email
// A workflow has also been created to notify the lead
// owner that a new inbound email has been created
global class ProcessReplyEmails implements Messaging.InboundEmailHandler {
    
    Global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope env ) {
        
        // Create an inboundEmailResult object for returning 
        // the result of the email service.
        Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();
        
        String mySubject = email.subject;
        String myPlainText = '';
        myPlainText = email.plainTextBody;
        
        // Capture the record ID from the subject line
        String refID = mySubject.right(15);
        System.debug('extract Subject: ' + refID);
        
        // New email task to be created
        Task[] newTask = new Task[0];
        try
        {
        	// Try to lookup the lead record that matches the ID in the subject
        	Lead l = [SELECT Id, Name, Email, Company, Phone, OwnerID FROM Lead WHERE ID = :refID];
            
            newTask.add(new Task(Description = myPlainText,
                                	Priority = 'Normal',
                                	Status = 'Inbound Email', 
                                	Subject = mySubject,
                                	whoId = l.Id
                                ));
            // insert the new task
            insert newTask;
            System.debug('New Task Created:' +newTask);
            
                if (email.binaryAttachments != null && email.binaryAttachments.size() > 0) 
                {
                    for (integer i = 0 ; i < email.binaryAttachments.size() ; i++) 
                    {
                        Attachment attachment = new Attachment();
                        // attach to the found record
                        attachment.ParentId = l.Id;
                        attachment.Name = email.binaryAttachments[i].filename;
                        attachment.Body = email.binaryAttachments[i].body;
                        attachment.Description = mySubject;
                        insert attachment;
                    }
                }                
        }
        catch(Exception e)
        {
            System.debug('Exception Issue: ' +e);
        }

        // Return True and exit.
        // True confirms program is complete and no emails 
        // should be sent to the sender of the reply email. 
        result.success = true;
        return result;
    } 
}

Apex Test Class
@isTest(SeeAllData=true)
public class ProcessReplyEmailsTest {
 public static testMethod void testProcessReplyEmails() 
    {        
        Messaging.InboundEmail email = new Messaging.InboundEmail() ;
        Messaging.InboundEnvelope env = new Messaging.InboundEnvelope();

        email.subject = 'Test Subject ';
        email.fromAddress = 'xxx@xxx.com';
        email.plainTextBody = 'Blah Blah Blah';        
          
        ProcessReplyEmails testProcessReplyEmails = new ProcessReplyEmails();
        testProcessReplyEmails.handleInboundEmail(email, env);

             
    }
}

The lines not covered start at newTask.add.

Thanks!
Having a problem with my first Visualforce email template. I'm trying to show order products on the email, and I can't find the answer on my own to fix the error in question title. All help is greatly appreciated!

My code is:

<messaging:emailTemplate subject="Downpayment Received from {!relatedTo.Account.Name} for Order {!relatedTo.OrderNumber}" recipientType="User" relatedToType="Order">

<messaging:htmlEmailBody >   
<html>
        <body>
         <STYLE type="text/css">
               TH {font-size: 13px; font-face: arial;background: #CCCCCC; border-width: 1;  text-align: center }
               TD  {font-size: 13px; font-face: verdana }
               TABLE {border: solid #CCCCCC; border-width: 1}
               TR {border: solid #CCCCCC; border-width: 1}
         </STYLE>
                  <font face="arial" size="2">               
<p>Hello!</p>
<p>We received the downpayment from {!relatedTo.Account.Name} for Order {!relatedTo.OrderNumber} on {!relatedTo.Payment_Received_1__c}.</p>
<p>Products on this order are:</p>
<apex:repeat var="lineItem" Value="{relatedTo.OrderItems}" >
<p>({lineItem.Quantity})- {lineItem.PricebookEntry} - {lilneItem.OrderProduct.Description__c} [{lineItem.OrderProduct.Screen_Opening__c}</apex:repeat> </p>
<p>The currently scheduled ship date for this order is {!relatedTo.Assigned_Ship_Date__c}. The salesman for this order is {!relatedTo.Salesman__c}.</p>
<p>Thank you!</p>
</font>
   </body>
  </html>
</messaging:htmlEmailBody>
</messaging:emailTemplate>
 
I'm capturing the date a sales rep accepts a lead into their funnel using a Date_Accepted__c field on the account. I want to map this to a Date_Accepted__c field all tasks associated with the account. I've tried doing this with a formula field and a workflow and was unable to do it because Task is not a child of Account. Is there an apex trigger I could use to map this date from account to task? 
I understand the time dependent action for workflow rule cannot be set when the evaluation criteria is 'created, and every time it's edited'.  But in the documentation it mentions as below. Error in documentation

Am I missing something in this?
 
Hi -
I'm trying to learn Salesforce via the Trailhead...I've hit a snag with one of the tutorials:
https://developer.salesforce.com/trailhead/customizing_user_interface/ui_list_views?state=id
The steps seem clear, but...I simply don't know where to begin. It says, "click Create New View at the top of any list page or in the Views section of any tab home page." I guess I don't know what a list page is, because I can't find anything called "Create New View" on any of the stuff I've worked on. Can someone help me connect the dots?

Thanks.
hi Friends ,


list vales are store in null values how to remove null values in list please help me


Thanks for advice

kullayappa

Hello SF Dev Community,

I hope everyone had a great weekend! I am trying to map a custom object from a Lead to a Contact when that Lead is converted. I see that it's an "Idea" posted and most of the comments say it's an easy fix with Apex coding, however, as a non-profit organization, it's tough sometimes to afford high-end development. I wasn't certain if this easy fix is something I could do as I've recently started to learn Apex coding. Any thoughts or instructions would greatly help.
 

Thank you,
 

AB

I have created a custom button called "Log-A-Call" and placed it on the opt of the Contact Page...
User-added image
The code behind the button looks like this...
/00T/e?title=Call&what_id={!Contact.Id }&followup=1&tsk5=Call&retURL={!Contact.Id }
The only issue is when a User clicks the button, the fields for Contact and Account d not populate.
I'm still learning how to write APEX code, and I am not sure how to write this.
Thanks
My organization uses Opportunities to generate $Market_Project__c. When that Market_Project__c is generated, the opportunity fills in several fields and triggers a number of notifications and tasks.

Is it possible to delete the workflow rules (triggered off the Opportunity) based on the status of a custom checkbox $Market_Project__c.$Event_Cancelled?
Can anyone point me in the right direction where I could find out how to pass the value of a picklist on the Account object to a similar picklist on VF Log A Call page. I am trying to create a dependent picklist on my VF Log A Call page but have the value predefined by a picklist value on the realted Account page.
  • February 23, 2016
  • Like
  • 1

Hello all,

I have a batch job using SOA that calls out to an internal (in-house) application.  It has been working
for quite a long time, but recently we started seeing some batches (not all) get a System.CalloutException
as follows:

06:06:00.443 (14443246995)|EXCEPTION_THROWN|[107]|System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: [WliSbTransports:381304]Exception in HttpOutboundMessageContext.RetrieveHttpResponseWork.run: java.net.SocketTimeoutException
java.net.SocketTimeoutException
    at weblogic.net.http.AsyncResponseHandler$MuxableSocketHTTPAsyncResponse$SocketTimeoutNotification.<clinit>(AsyncResponseHandler.java:551)
    at weblogic.net.http.AsyncResponseHandler$MuxableSocketHTTPAsyncResponse.handleTimeout(AsyncResponseHandler.java:396)
    at weblogic.net.http.AsyncResponseHandler$MuxableSocketHTTPAsyncResponse.timeout(AsyncResponseHandler.java:502)
    at weblogic.socket.SSLFilterImpl.timeout(SSLFilterImpl.java:282)
    at weblogic.socket.SocketMuxer$TimerListenerImpl.timerExpired(SocketMuxer.java:985)
    at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
 faultcode=BEA-380000 faultactor=

Here are the relevant debug log entries:
>>>> this shows the configured (via a custom setting) max timeout of 2 minutes (right?)
06:05:46.0 (197739069)|USER_DEBUG|[252]|DEBUG|(doCallout) endpoint: https://soa-app.tpa.bhn.net:8110/ConstInt/CarlInfo?wsdl, timeout: 120000
>>>> this is the last entry before the synchronous callout
06:05:46.0 (439200493)|CALLOUT_REQUEST|[107]|getCarlInfo:[apex_schema_type_info=(carl.bhntampa.com, false, false), carlIds=307141, 308773, 309197, 308791, 326971, 294926, 316435, 326760, 327228, 314680, 314489, 317260, 299892, 312385, 309598, 301140, 283894, 316860, 327205, 306558, 315239, 187167, 283499, 366190, 314846, 314204, 314218, 298740, 317291, 314966, 367312, 317912, 366192, 366885, 285552, 309794, 313714, 285551, 309799, 285556, 335527, 282875, 367483, 309792, 285555, 367206, 307672, 309793, 313710, 318240, 301444, 310414, 317464, 291091, 305452, 316534, 369654, 317681, 367509, 316826, 363161, 318429, 308501, 315622, 357571, 318474, 318445, 276556, 316827, 367554, 317563, 367617, 367639, 361574, 304283, 367622, 367684, 318688, 367635, 316824, 367620, 305672, 318690, 363247, 316680, 318839, 367338, 318272, 318635, 304198, 318943, 311999, 286633, 313896, 313898, 338556, 316599, 307264, 318066, 326252, 359683, 318040, 318488, 319218, 315600, 319380, 319216, 334011, 318720, 318877, 327051, 318686, 314722, 274227, 316562, 318408, 319368, 315057, 319425, 316158, 290370, 318412, 310072, 313894, 309139, 343561, 318838, 380595, 319627, 313901, 313893, 313897, 327385, 313892, 305756, 311043, 315546, 298078, 327341, 294253, 319733, 318522, 314642, 318990, 274475, 307625, 294247, 294662, 282970, 294242, 294249, 314551, 288192, 275062, 318989, 319863, 311041, 318991, 300342, 319962, 319864, 318911, 319822, 318144, 33333, 362321, 358863, 320091, 298431, 321948, 320118, 351615, 359145, 317533, 327439, 362110, 321945, 316868, 360864, 364416, 321947, 327486, 373387, 327507, 319135, 286913, 319805, 339553, 320244, 317938, 318977, 368429, 368203, 364806, 313374, 318067, 327363, 320301, 319945, carlIds_type_info=(carlIds, carl.bhntampa.com, null, 1, 1, false), field_order_type_info=(carlIds)]::SOAPAction="" Accept=text/xml User-Agent=SFDC-Callout/36.0 SFDC_STACK_DEPTH=1 Content-Type=text/xml; charset=UTF-8 

>>>> here is the next entry, which occurs not 2 minutes later, but about 14 seconds later
06:06:00.443 (14443246995)|EXCEPTION_THROWN|[107]|System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: [WliSbTransports:381304]Exception in HttpOutboundMessageContext.RetrieveHttpResponseWork.run: java.net.SocketTimeoutException

What am I missing here?   I started with the assumption that the server I am calling is not keeping up, and that that is the reason for the timeout.  But the developer tells me he sees these being responded to in at most 10-12 seconds... s

So my real question is:
1.  Is it possible that something in our SOA middleware is throwing this exception, and not Salesforce?

Thanks,

Mitch
 

how to avoid the case assigned to a user who is not currently logged in to salesforce using validation rules?
Hi,

I am new to this forum so not quite sure whether this is the right place to post this because it is not a question - It's more of an announcement of a new plugin in Sublime to preview Visualforce page in Sublime text.

Initially it was a question on stackexchange: http://salesforce.stackexchange.com/questions/61323/how-to-preview-visualforce-page-using-mavensmate/61336#61336 . Although I don't quite use the preview button in developer console, but this question made me think that there is a requirement to bring this functionality to Sublime text. So I wrote this plugin. The links to this are:

Github: https://github.com/Lanceshi2/VisualforcePreview
Package Control: https://packagecontrol.io/packages/VisualforcePreview

Please let me know what you think about this.