Как создать кнопку загрузки на странице visualforce, совместимую с Salesforce Lightning Experience - PullRequest
0 голосов
/ 17 января 2019

У меня есть страница VF (код ниже), в которой есть настраиваемая кнопка, которая захватывает значение поля и выдает всплывающее окно загрузки для сохранения в файл этого значения. Это работает гладко в visualforce. В Classic это выглядит примерно так: https://sfuser -dev-developer-edition.na50.force.com / apex / Weather_View? Id = a0A6A000009XV2k & sfdc.override = 1 Однако, как только мы перешли на Lightning, кнопка выдает странное всплывающее окно (прикрепленный снимок экрана), и загружаемый файл и формат изменяются (имя файла просто загружается, и оно не идентифицирует предоставленный формат). Есть ли способ, как я могу решить эту проблему? В ближайшее время мы не перейдем на компоненты Lightning, поэтому нам придется некоторое время жить с этой страницей VF, отображаемой в Lightning.

Я пытался настроить атрибут href в JS, но, похоже, это не помогло.

<apex:page standardController="Weather__c" showHeader="false" sidebar="false">
    <apex:pageMessages />
    <apex:form>
        <apex:pageBlock mode="maindetail" title="Weather Details">
            <apex:pageBlockSection columns="2">
                <apex:outputField value="{!Weather__c.Name}" />
                <apex:outputField value="{!Weather__c.OwnerId}" />
                <apex:outputField value="{!Weather__c.City__c}" />
                <apex:outputField value="{!Weather__c.TempInFahrenheit__c }" />
                <apex:pageBlockSectionItem >
                    <apex:outputLabel for="forecastid" value="Forecast Details"/>
                    <apex:outputField id="forecastid" value="{!Weather__c.Forecast_Details__c }"/>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem ></apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputPanel style="padding-left: 45%">
                        <apex:commandButton value="Download Forecast Details" oncomplete="downloadVal('Forecast_Details' + '.txt', 'false')" />
                    </apex:outputPanel>
                </apex:pageBlockSectionItem>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>

    <script type="text/javascript">
        function downloadVal(filename, addText) {
            var data = '{!Weather__c.Forecast_Details__c}';
            var bundleData = data;
            try {
                if(addText == 'true') {
                    newText = 'Adding some more text';
                    bundleData = data + '\n' + newText;
                }
                var element = document.createElement('a');
                element.setAttribute('href', 'data:application/text;charset=utf-8,' + encodeURIComponent(bundleData));
                element.setAttribute('download', filename);
                element.style.display = 'none';
                document.body.appendChild(element);
                element.click();
                document.body.removeChild(element);
            } catch(e) {
                alert(e);
            }
        }
    </script>
</apex:page>

Изображение ошибки опыта молнии

...