开云体育

ctrl + shift + ? for shortcuts
© 2025 Groups.io

Event: MadFox Monthly Meetup - Tuesday, December 17, 2024 #cal-reminder

Group Notification
 

Reminder: MadFox Monthly Meetup

When:
Tuesday, December 17, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Event: MadFox Monthly Meetup - Tuesday, December 17, 2024 #cal-reminder

Group Notification
 

Reminder: MadFox Monthly Meetup

When:
Tuesday, December 17, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


grep

 

开云体育

A bit off-topic, but for all of you with Eggead.io subscriptions, Bonnie Eisenman has a 13 lesson half-hour course on using grep & find that is completely kick-ass. For me it made grep a super tool for finding anything anywhere, even using complex regex. Lessons are super-focused and short, each building on the previous.



--
Cliff
Cliff Smith / HawkRidge
1 (608) 373-4716 / cliff@...



Now: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-notice

Group Notification
 

MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


New Location Tonight

 

Cross Plains Library
2107 Julius St, Cross Plains, WI 53528

Sauk Library is closed for staff training.

See ya soon!

Eric


Re: Event: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-reminder

 

Yes!

MadFox
Tuesday, November 19 · 5:30 – 8:30pm
Time zone: America/Chicago
Google Meet joining info
Video call link:



On Tue, Nov 19, 2024 at 1:28?PM Jack Smith via <jack=[email protected]> wrote:
Can I attend remotely?

Jack

On Nov 18, 2024, at 1:14?PM, Jim Tooley <jim@...> wrote:

?

Me Too!


<jim7_personal.png>
On 11/18/2024 12:02 PM, Eric Selje via wrote:
I'll be there!

Eric

On Sat, Nov 16, 2024 at 5:30?PM Group Notification <[email protected]> wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Re: Event: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-reminder

 

开云体育

Can I attend remotely?

Jack

On Nov 18, 2024, at 1:14?PM, Jim Tooley <jim@...> wrote:

?

Me Too!


<jim7_personal.png>
On 11/18/2024 12:02 PM, Eric Selje via groups.io wrote:
I'll be there!

Eric

On Sat, Nov 16, 2024 at 5:30?PM Group Notification <[email protected]> wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Event: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-reminder

Group Notification
 

Reminder: MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Re: Event: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-reminder

 

开云体育

Me Too!


On 11/18/2024 12:02 PM, Eric Selje via groups.io wrote:

I'll be there!

Eric

On Sat, Nov 16, 2024 at 5:30?PM Group Notification <[email protected]> wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Re: Event: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-reminder

 

I'll be there!

Eric


On Sat, Nov 16, 2024 at 5:30?PM Group Notification <[email protected]> wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Event: MadFox Monthly Meetup - Tuesday, November 19, 2024 #cal-reminder

Group Notification
 

Reminder: MadFox Monthly Meetup

When:
Tuesday, November 19, 2024
5:30pm to 8:00pm
(UTC-06:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


javascript wierdness

 

开云体育

Working with Vue.js Vuetify scripts.?

?

I had this function to display a status alert at the top of my page:

?

? ? ? ?showAlert(aMessage, aType)

? ? ? ? {

? ? ? ? ? this.alert = true;

? ? ? ? ? this.statusAlert = aMessage;

? ? ? ? ? this.alertType = aType;

? ? ? ? ? console.log(aType, aMessage);

? ? ? ? },

?

Tried to invoke it and got this error in the console:

Filer.htm:505? Uncaught TypeError: this.showAlert is not a function

?

Banged my head for a good hour trying to figure out what was going on.? Finally added this code:

?

? ? ? ?onAlert(alertMsg,alertType)

? ? ? ? {

? ? ? ? ? console.log('got here');

? ? ? ? ? console.log(alertMsg,alertType);

? ? ? ? ? this.alert = true;

? ? ? ? ? this.statusAlert = alertMsg;

? ? ? ? ? this.alertType = alertType;

? ? ? ? },

?

Called that, using the same parameters, initial tests worked.? OK, that was odd, but whatever.? I erased the showAlert code and changed all showAlert calls to onAlert.? Now I’m getting onAlert is not a function! ?Switched back to showAlert, some calls fail, other do not ?– can’t get anything to work consistently.?

?

Finally gave up on the idea of an alert function – replaced all instances of showAlert(“message”,”type”) with commands to directly set statusAlert and alertType

?

I have no idea WTF is wrong.? FWIW, I ran my code thru a validator and got no complaints.? Pasting the entire code block below in case someone with nothing better to do wants to look at it but as long as my workaround is functional I have minimal interest in messing further with this.

?

?

--sg

?

? <script type="text/javascript">

? ? new Vue({

? ? ? el: '#app',

? ? ? vuetify: new Vuetify(),

? ? ? mounted()

? ? ? {

? ? ? ? console.log('Checking logon status');

? ? ? ? ajaxJson("LogonStatus.scp", null,

? ? ? ? ? (response) =>

? ? ? ? ? {

? ? ? ? ? ? console.log(response);

? ? ? ? ? ? this.oUser = response;

? ? ? ? ? ? if (this.oUser.level < 4)

? ? ? ? ? ? {

? ? ? ? ? ? ? alert('You do not have permission to access this page.');

? ? ? ? ? ? ? window.open('SCPLogon.htm', '_self', 'noreferrer');

? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? ? this.onAlert = ('Logged on as ' + this.oUser.username, "success");

? ? ? ? ? ? }

? ? ? ? ? },

? ? ? ? ? (error) =>

? ? ? ? ? {

? ? ? ? ? ? console.log('ERROR');

? ? ? ? ? ? console.log(error.message);

? ? ? ? ? ? window.open('SCPLogon.htm', '_self', 'noreferrer');

? ? ? ? ? });

? ? ? ? const payLoad = { mode: "table" };

? ? ? ? ajaxJson("/SCP/Getfiles.scp", payLoad,

? ? ? ? ? (response) =>

? ? ? ? ? {

? ? ? ? ? ? console.log("Got tables");

? ? ? ? ? ? this.tableList = response;

? ? ? ? ? ? console.log(this.tableList);

? ? ? ? ? },

? ? ? ? ? (error) =>

? ? ? ? ? {

? ? ? ? ? ? this.onAlert(error.message, "error");

? ? ? ? ? });

? ? ? ? return;

? ? ? },

? ? ? data: () => (

? ? ? ? {

? ? ? ? ? oUser: {},

? ? ? ? ? date: new Date().toISOString().substr(0, 10),

? ? ? ? ? menu: false,

? ? ? ? ? menu2: false,

? ? ? ? ? menu3: false,

? ? ? ? ? alert: true,

? ? ? ? ? search: '',

? ? ? ? ? statusAlert: '',

? ? ? ? ? tableList: '',

? ? ? ? ? fieldList: [],

? ? ? ? ? selectedFields: [],

? ? ? ? ? queryString: "",

? ? ? ? ? logList: [],

? ? ? ? ? iniList: [{ filename: 'scp.ini' }],

? ? ? ? ? alertType: '',

? ? ? ? ? dataMode: 0,

? ? ? ? ? valid: true,

? ? ? ? ? tab: null,

? ? ? ? ? items: [],

? ? ? ? ? fieldPicker: false,

? ? ? ? ? menuItems: [

? ? ? ? ? ? { text: 'Edit Profile', href: 'Patron.htm?id=:USER' },

? ? ? ? ? ? { text: 'Log Off', href: 'SCPLogon.htm' },

? ? ? ? ? ],

? ? ? ? ? tableName: "",

? ? ? ? ? selectedTable: { filename: '' },

? ? ? ? ? selectedLog: { filename: '' },

? ? ? ? ? selectedIni: { filename: '' },

? ? ? ? ? logContent: "",

? ? ? ? ? iniContent: "",

? ? ? ? ? headers: [],

? ? ? ? ? fieldHeaders: [

? ? ? ? ? ? {

? ? ? ? ? ? ? text: 'Field Name',

? ? ? ? ? ? ? align: 'start',

? ? ? ? ? ? ? value: 'fieldname',

? ? ? ? ? ? ? class: "grey accent-1"

? ? ? ? ? ? }

? ? ? ? ? ],

? ? ? ? ? pagination:

? ? ? ? ? {

? ? ? ? ? ? page: 1,

? ? ? ? ? ? rowsPerPage: 20

? ? ? ? ? },

? ? ? ? }),

? ? ? methods: {

? ? ? ? validate()

? ? ? ? {

? ? ? ? ? this.$refs.form.validate()

? ? ? ? },

?

? ? ? ? resetValidation()

? ? ? ? {

? ? ? ? ? this.$refs.form.resetValidation()

? ? ? ? },

?

? ? ? ? showAlert(aMessage, aType)

? ? ? ? {

? ? ? ? ? this.alert = true;

? ? ? ? ? this.statusAlert = aMessage;

? ? ? ? ? this.alertType = aType;

? ? ? ? ? console.log(aType, aMessage);

? ? ? ? },

? ? ? ? onAlert(alertMsg,alertType)

? ? ? ? {

? ? ? ? ? console.log(alertMsg,alertType);

? ? ? ? ? this.alert = true;

? ? ? ? ? this.statusAlert = alertMsg;

? ? ? ? ? this.alertType = alertType;

? ? ? ? },

? ? ? ? navigate(href)

? ? ? ? {

? ? ? ? ? console.log('navigating..' + href);

? ? ? ? ? window.location.href = href;

? ? ? ? },

? ? ? ? genHeaders()

? ? ? ? {

? ? ? ? ? {

? ? ? ? ? ? //set having unique values

? ? ? ? ? ? let s = new Set();

?

? ? ? ? ? ? this.items.forEach(item =>

? ? ? ? ? ? {

? ? ? ? ? ? ? for (f in item)

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? //adding an existing value doesn't override the old one

? ? ? ? ? ? ? ? s.add(f)

? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? ? ? //respect the headers format required by Vuetify which

? ? ? ? ? ? // should has at least two fields (text, value)

? ? ? ? ? ? return Array.from(s).map(a =>

? ? ? ? ? ? {

? ? ? ? ? ? ? return {

? ? ? ? ? ? ? ? text: a.toUpperCase(),

? ? ? ? ? ? ? ? value: a

? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? ? }

? ? ? ? },

? ? ? ? goToLastPage()

? ? ? ? {

? ? ? ? ? const totalItems = this.items.length;

? ? ? ? ? const rowsPerPage = this.pagination.rowsPerPage;

? ? ? ? ? const lastPage = Math.ceil(totalItems / rowsPerPage);

? ? ? ? ? console.log('last', lastPage);

? ? ? ? ? this.pagination.page = lastPage; // Update the current page to the last

? ? ? ? },

? ? ? ? goToFirstPage()

? ? ? ? {

? ? ? ? ? this.pagination.page = 1;

? ? ? ? },

? ? ? ? onTabSelected(index)

? ? ? ? {

? ? ? ? ? console.log(this.tab);

? ? ? ? ? switch (this.tab)

? ? ? ? ? {

? ? ? ? ? ? case "tab2":

? ? ? ? ? ? ? const payLoad = { mode: "logs" };

? ? ? ? ? ? ? ajaxJson("/SCP/Getfiles.scp", payLoad,

? ? ? ? ? ? ? ? (response) =>

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? console.log("Got logs", response);

? ? ? ? ? ? ? ? ? this.logList = response;

? ? ? ? ? ? ? ? ? console.log(this.logList);

? ? ? ? ? ? ? ? ? this.selectedLog = this.logList[0].filename; ?// ?? is drop down model an object or a string, ?doesn't work using selectedLog.filename

? ? ? ? ? ? ? ? ? this.loadText("logs", this.logList[0].filename);

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? (error) =>

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? this.onAlert(error.message, "error");

? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? break;

? ? ? ? ? ? case "tab3":

? ? ? ? ? ? ? this.selectedIni = this.iniList[0].filename;

? ? ? ? ? ? ? console.log('ini tab');

? ? ? ? ? ? ? this.loadText("inis", this.iniList[0].filename);

? ? ? ? ? ? ? break;

? ? ? ? ? }

? ? ? ? },

? ? ? ? loadText(fileType, fileName)

? ? ? ? {

? ? ? ? ? fileName = this.qualifyName(fileType, fileName);

? ? ? ? ? const payLoad = { filename: fileName, action: "read" };

? ? ? ? ? ajaxJson("/SCP/filer.scp", payLoad,

? ? ? ? ? ? (response) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? console.log("Got file contents");

? ? ? ? ? ? ? // ? ? ? ? ? ? ? this.logList = response;

? ? ? ? ? ? ? console.log(response);

? ? ? ? ? ? ? switch (fileType)

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? case "logs":

? ? ? ? ? ? ? ? ? this.logContent = response.content;

? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? case "inis":

? ? ? ? ? ? ? ? ? this.iniContent = response.content;

? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? (error) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? this.onAlert(error.message, "error");

? ? ? ? ? ? });

? ? ? ? },

? ? ? ? saveText(fileType, fileName, fileContents)

? ? ? ? {

? ? ? ? ? fileName = this.qualifyName(fileType, fileName);

? ? ? ? ? fileContents = this.qualifyContents(fileType);

? ? ? ? ? //this.showAlert('!!!!');

? ? ? ? ?// this.onAlert('saving','success');

? ? ? ? ? const payLoad = { filename: fileName, action: "save", contents: fileContents };

? ? ? ? ? ajaxJson("/SCP/filer.scp", payLoad,

? ? ? ? ? ? (response) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? console.log(this.selectedIni);

? ? ? ? ? ? ? this.showAlert("File " + fileName + " has been updated on the server", "success");

? ? ? ? ? ? ? console.log(response);

? ? ? ? ? ? },

? ? ? ? ? ? (error) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? this.showAlert(error.message, "error");

? ? ? ? ? ? });

? ? ? ? },

? ? ? ? qualifyName(fileType, fileName)

? ? ? ? {

? ? ? ? ? console.log('Qualifying', fileName, fileType);

? ? ? ? ? switch (fileType)

? ? ? ? ? {

? ? ? ? ? ? case "logs":

? ? ? ? ? ? ? console.log(fileName, this.selectedLogs, this.selectedLogs.filename);

? ? ? ? ? ? ? if (!fileName)

? ? ? ? ? ? ? ? fileName = this.selectedLog.filename;

? ? ? ? ? ? ? fileName = '\\logs\\' + fileName + '.txt';

? ? ? ? ? ? ? break;

? ? ? ? ? ? case "inis":

? ? ? ? ? ? ? console.log(fileName, this.selectedIni, this.selectedIni.filename);

? ? ? ? ? ? ? if (!fileName)

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (this.selectedIni.filename)

? ? ? ? ? ? ? ? ? fileName = this.selectedIni.filename

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? fileName = this.selectedIni;

? ? ? ? ? ? ? }

? ? ? ? ? ? ? break;

? ? ? ? ? }

? ? ? ? ? console.log('...to ', fileName);

? ? ? ? ? return fileName;

? ? ? ? },

?

? ? ? ? qualifyContents(fileType)

? ? ? ? {

? ? ? ? ? let contents = '';

? ? ? ? ? switch (fileType)

? ? ? ? ? {

? ? ? ? ? ? case "inis":

? ? ? ? ? ? ? contents = this.iniContent;

? ? ? ? ? ? ? break;

? ? ? ? ? }

? ? ? ? ? console.log('Contents: ', contents);

? ? ? ? ? return contents;

? ? ? ? },

?

? ? ? ? jumpToBottom()

? ? ? ? {

? ? ? ? ? console.log('to bottom?');

? ? ? ? ? document.getElementById("log-entries").scrollTop = document.getElementById("log-entries").scrollHeight;

? ? ? ? },

? ? ? ? tableSelected()

? ? ? ? {

? ? ? ? ? const payLoad = { table: this.selectedTable.filename };

? ? ? ? ? this.items = [];

? ? ? ? ? console.log(payLoad);

? ? ? ? ? ajaxJson("/SCP/Getfields.scp", payLoad,

? ? ? ? ? ? (response) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? console.log("Got fields");

? ? ? ? ? ? ? this.fieldList = response;

? ? ? ? ? ? ? console.log(this.fieldList);

? ? ? ? ? ? ? this.fieldPicker = true;

? ? ? ? ? ? ? this.queryString = "SELECT * FROM " + this.selectedTable.filename;

? ? ? ? ? ? },

? ? ? ? ? ? (error) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? this.onAlert(error.message, "error");

? ? ? ? ? ? });

? ? ? ? ? return;

? ? ? ? },

? ? ? ? selectFields()

? ? ? ? {

? ? ? ? ? console.log('selectFields', this.fieldPicker)

? ? ? ? ? if (!this.fieldPicker)

? ? ? ? ? ? this.fieldPicker = true

? ? ? ? ? else

? ? ? ? ? {

? ? ? ? ? ? let fldstr = '';

? ? ? ? ? ? this.selectedFields.forEach(f =>

? ? ? ? ? ? {

? ? ? ? ? ? ? console.log(f.fieldname);

? ? ? ? ? ? ? fldstr += f.fieldname + ',';

? ? ? ? ? ? }

? ? ? ? ? ? )

? ? ? ? ? ? this.selectedFields = [];

? ? ? ? ? ? if (fldstr)

? ? ? ? ? ? {

? ? ? ? ? ? ? fldstr = fldstr.replace(/,$/, "");

? ? ? ? ? ? ? this.queryString = this.queryString.replace("*", fldstr);

? ? ? ? ? ? ? console.log(fldstr);

? ? ? ? ? ? }

? ? ? ? ? ? this.fieldPicker = false;

? ? ? ? ? }

? ? ? ? },

? ? ? ? submitQuery()

? ? ? ? {

? ? ? ? ? console.log('Executing SQL request..');

? ? ? ? ? console.log(this.tableName);

? ? ? ? ? let submitObject = { sql: this.queryString };

? ? ? ? ? console.log(submitObject);

? ? ? ? ? ajaxJson("/SCP/SQLizer.scp", submitObject,

? ? ? ? ? ? (response) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? console.log(response);

? ? ? ? ? ? ? this.items = response;

? ? ? ? ? ? ? this.items.forEach(item =>

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? // ? ? ? ?console.log("item", item);

? ? ? ? ? ? ? ? for (f in item)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? // ? ? ? ? ?console.log("f", f);

? ? ? ? ? ? ? ? ? if (item[f] instanceof Date)

? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? item[f] = moment(item[f]).format(moment.HTML5_FMT.DATE);

? ? ? ? ? ? ? ? ? ? if (f == 'updated')

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? item[f] = moment(item[f]).format('LLL');

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? });

? ? ? ? ? ? ? this.headers = this.genHeaders();

? ? ? ? ? ? },

? ? ? ? ? ? (error) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? console.log(error);

? ? ? ? ? ? ? this.onAlert(error.message, "error");

? ? ? ? ? ? }

? ? ? ? ? );

? ? ? ? }

? ? ? }

? ? })

? </script>

?

?

?


Re: Reports 101

 

开云体育

Just to be clear, my problem was not getting my reports to work on the web – it was just having to relearn some basic report designer usage.? I already had some legacy reports that had been set up using the Data Environment so it was a matter of figuring out how to modify the DE to get all the reports working like I want them to.?

?

I’m using Vue.js for my front end pages and an app built with Rick Strahl’s Web Connection to access VFP data on the back end.? As noted, I’m using FoxyPreviewer which makes outputting reports to PDFs ridiculously simple.? Here’s a snippet from my Reporter method:

?

lcStem = lcFilename

lcFilename = lcFilename + [.pdf]

lnX = 1

DO WHILE FILE([..\web\docs\reports\]+lcFilename)? && Make sure file name is unique

? lcFilename = lcStem+ [-] + TRANSFORM(lnX) + [.pdf]

??lnX = lnX + 1?

ENDDO

lcReportName = [reports\]+lcReportName + [.frx]

?

DO FoxyPreviewer.App

* Generate PDF (FoxyPreviewer object type 10)

REPORT FORM (lcReportName);

? OBJECT TYPE 10 ;

? TO FILE [..\web\docs\reports\]+lcFilename

?

IF VARTYPE(loObj) <> [O]

? loObj = CREATEOBJECT("Empty")

ENDIF

ADDPROPERTY(loObj, "pdfname",lcFilename)

?

RETURN loObj

?

loObj gets passed as a JSON object to the front end script, so I can easily display the PDF to the end user:

?

? ? ? ? ? ? ? ? ? window.open('docs/reports/' + response.pdfname, '_blank', 'noreferrer');

?

--sg

?

From: [email protected] On Behalf Of Rizwan Hassan
Sent: Monday, October 28, 2024 02:06 PM
To: [email protected]
Subject: Re: [MadFox] Reports 101

?

Greetings! I’d like to extend my thanks to Eric for always being here to help. I read your email, and I can sense your determination to push forward—something that resonates deeply, as many of us are also VFP programmers in our 40s, grappling with the challenges of learning new tools and technologies. I remember feeling similarly lost, like being caught in a “rabbit hole” (think The Matrix, 1999).

In terms of reporting for the web, I wanted to share a bit of my own experience. As we all know, the VFP reporting engine offers unmatched precision with its ability to position objects down to the millimeter. Out of all available tools, only Crystal Reports can truly match that level of accuracy.

Could you tell me a bit more about your web environment setup? Are you working with a Windows + XAMPP + PHP + MySQL stack, or is it a Windows + + MSSQL Server setup? Understanding your stack could help us troubleshoot better together. Just know, you’re not alone in this (as they say at SETI.org).

One approach I’ve used is to design reports in VFP, save them as HTML, and then integrate that HTML into my PHP setup. By replacing tags with field names, I’ve found it works seamlessly.

Looking forward to hearing more about your setup and seeing how we can work through this together.

This is designed in vfp then saved in html to replace the tag.?

as Eric mentioned, you have to use select queries before calling report no table save in the report data environment.

regards?

rizwan hassan?

?

?

On Mon, 28 Oct 2024 at 10:15, Stein Goering via <sgoering=[email protected]> wrote:

The web app I worked on over the past several years did not directly use VFP reports, so my skills in that area have been seriously neglected.

?

I’m now in the process of porting an old desktop app to the web, but for this one I want to leverage my existing reports.? When the user requests a report, I use FoxyPreviewer to send output to a PDF, which I then open in a new tab.?? This is working quite well, but it’s meant having to relearn some pretty basic stuff.

?

I just spent well over an hour trying to figure out how to edit a report data environment.? I kept thinking I was missing something on the Report menu.? Initial Google attempts kept pointing to sources that would start out with “Open the Data Environment…”?

?

For the record (and in the hope that if I write it down I’ll remember it next time), it’s under the View menu when the report designer is in scope.?

?

--sg

?

Steven (Stein) Goering

?


?

--

?????? ?????

?

Regards

Rizwan Hassan


Re: Reports 101

 

Greetings! I’d like to extend my thanks to Eric for always being here to help. I read your email, and I can sense your determination to push forward—something that resonates deeply, as many of us are also VFP programmers in our 40s, grappling with the challenges of learning new tools and technologies. I remember feeling similarly lost, like being caught in a “rabbit hole” (think The Matrix, 1999).

In terms of reporting for the web, I wanted to share a bit of my own experience. As we all know, the VFP reporting engine offers unmatched precision with its ability to position objects down to the millimeter. Out of all available tools, only Crystal Reports can truly match that level of accuracy.

Could you tell me a bit more about your web environment setup? Are you working with a Windows + XAMPP + PHP + MySQL stack, or is it a Windows + + MSSQL Server setup? Understanding your stack could help us troubleshoot better together. Just know, you’re not alone in this (as they say at SETI.org).

One approach I’ve used is to design reports in VFP, save them as HTML, and then integrate that HTML into my PHP setup. By replacing tags with field names, I’ve found it works seamlessly.

Looking forward to hearing more about your setup and seeing how we can work through this together.

image.png
This is designed in vfp then saved in html to replace the tag.?
as Eric mentioned, you have to use select queries before calling report no table save in the report data environment.
regards?
rizwan hassan?


On Mon, 28 Oct 2024 at 10:15, Stein Goering via <sgoering=[email protected]> wrote:

The web app I worked on over the past several years did not directly use VFP reports, so my skills in that area have been seriously neglected.

?

I’m now in the process of porting an old desktop app to the web, but for this one I want to leverage my existing reports.? When the user requests a report, I use FoxyPreviewer to send output to a PDF, which I then open in a new tab.?? This is working quite well, but it’s meant having to relearn some pretty basic stuff.

?

I just spent well over an hour trying to figure out how to edit a report data environment.? I kept thinking I was missing something on the Report menu.? Initial Google attempts kept pointing to sources that would start out with “Open the Data Environment…”?

?

For the record (and in the hope that if I write it down I’ll remember it next time), it’s under the View menu when the report designer is in scope.?

?

--sg

?

Steven (Stein) Goering

?



--
?????? ?????

Regards
Rizwan Hassan


Re: Reports 101

 

I think I avoided Data Environments and set up everything programmatically before calling the report.

Eric


On Mon, Oct 28, 2024 at 12:15?AM Stein Goering via <sgoering=[email protected]> wrote:

The web app I worked on over the past several years did not directly use VFP reports, so my skills in that area have been seriously neglected.

?

I’m now in the process of porting an old desktop app to the web, but for this one I want to leverage my existing reports.? When the user requests a report, I use FoxyPreviewer to send output to a PDF, which I then open in a new tab.?? This is working quite well, but it’s meant having to relearn some pretty basic stuff.

?

I just spent well over an hour trying to figure out how to edit a report data environment.? I kept thinking I was missing something on the Report menu.? Initial Google attempts kept pointing to sources that would start out with “Open the Data Environment…”?

?

For the record (and in the hope that if I write it down I’ll remember it next time), it’s under the View menu when the report designer is in scope.?

?

--sg

?

Steven (Stein) Goering

?


Reports 101

 

开云体育

The web app I worked on over the past several years did not directly use VFP reports, so my skills in that area have been seriously neglected.

?

I’m now in the process of porting an old desktop app to the web, but for this one I want to leverage my existing reports.? When the user requests a report, I use FoxyPreviewer to send output to a PDF, which I then open in a new tab.?? This is working quite well, but it’s meant having to relearn some pretty basic stuff.

?

I just spent well over an hour trying to figure out how to edit a report data environment.? I kept thinking I was missing something on the Report menu.? Initial Google attempts kept pointing to sources that would start out with “Open the Data Environment…”?

?

For the record (and in the hope that if I write it down I’ll remember it next time), it’s under the View menu when the report designer is in scope.?

?

--sg

?

Steven (Stein) Goering

?


Re: Event: MadFox Monthly Meetup - Tuesday, October 15, 2024 #cal-reminder

 

开云体育

FYI, SWFox videos will not be released for some time. Those that registered and supported ?the conference and speakers have the competitive advantage of private videos until we schedule the release (TBD).?

Rick
Please excuse brevity, sent from phone

On Oct 21, 2024, at 10:33?AM, Eric Selje <eric.selje@...> wrote:

?
Sorry guys - I was in Phoenix all week.? I (remotely) gave my AI presentation at Southwest Fox and I think it went well. I'd be happy to re-deliver the finished product to you next month or we can watch the recorded version once the Geek Gatherings folks release it to the public.

Eric


On Mon, Oct 14, 2024 at 5:30?PM Group Notification <[email protected]> wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, October 15, 2024
5:30pm to 8:00pm
(UTC-05:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Re: Event: MadFox Monthly Meetup - Tuesday, October 15, 2024 #cal-reminder

 

Sorry guys - I was in Phoenix all week.? I (remotely) gave my AI presentation at Southwest Fox and I think it went well. I'd be happy to re-deliver the finished product to you next month or we can watch the recorded version once the Geek Gatherings folks release it to the public.

Eric


On Mon, Oct 14, 2024 at 5:30?PM Group Notification <[email protected]> wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, October 15, 2024
5:30pm to 8:00pm
(UTC-05:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Now: MadFox Monthly Meetup - Tuesday, October 15, 2024 #cal-notice

Group Notification
 

MadFox Monthly Meetup

When:
Tuesday, October 15, 2024
5:30pm to 8:00pm
(UTC-05:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.


Re: Event: MadFox Monthly Meetup - Tuesday, October 15, 2024 #cal-reminder

 

开云体育

Actually, I'm out this month - got too much family stuff right now...



--
Cliff
Cliff Smith / HawkRidge
1 (608) 373-4716 / cliff@...

On 10/15/24 2:29 PM, Jim Tooley wrote:

Anyone planning on coming this month?


On 10/14/2024 5:30 PM, Group Notification wrote:

Reminder: MadFox Monthly Meetup

When:
Tuesday, October 15, 2024
5:30pm to 8:00pm
(UTC-05:00) America/Chicago

Where:
Sauk City Library

Organizer:
Eric Selje
eric.selje@...
608-213-9567

View Event

Description:
Join us for our monthly get together. We can talk about anything development related. We started as a FoxPro group but now we talk about even more: Web Development, Mobile Development, Music, SQL Server and other databases, etc.

We are meeting in person again, but will try to livestream the meeting as well thanks to Aceware!? RSVP if you'd like to join us online.